首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Inno安装卸载程序的默认名称以避免命名冲突

更改Inno安装卸载程序的默认名称以避免命名冲突
EN

Stack Overflow用户
提问于 2013-09-04 23:40:04
回答 6查看 16.4K关注 0票数 12

我需要在同一个目录中安装几个安装程序,这样它就会与Inno安装程序卸载程序名unins000.exeunins000.dat冲突。

是否有方法更改Inno安装卸载程序的默认名称?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-05 22:23:48

这与Elektrostudio的回答相似,也是对我起作用的原因:

代码语言:javascript
复制
    Filename: {cmd}; Parameters: "/C Mkdir ""{app}\Uninstallers\{#MyAppName}"""; Flags: RunHidden WaitUntilTerminated
    Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.exe"" ""{app}\Uninstallers\{#MyAppName} - uninstall.exe"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
    Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.dat"" ""{app}\Uninstallers\{#MyAppName} - uninstall.dat"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
    Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.msg"" ""{app}\Uninstallers\{#MyAppName} - uninstall.msg"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
    Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#MyAppName}_is1"" /V ""UninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#MyAppName} - uninstall.exe\"""" /F"; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated
    Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#MyAppName}_is1"" /V ""QuietUninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#MyAppName} - uninstall.exe\"" /SILENT"" /F"; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated

使用Windows 7,我发现“迁移”命令无法工作,除非我有地方可以首先将文件移动,这意味着我必须在顶部添加mkdir行。另外,如果没有移动.msg文件,卸载程序也将无法工作,因此我遵循了模式,并添加了这一行。

我没有费心把"Windows 8“改为"Windows 7”,但这并没有什么区别,所以我就不提它了。如果有我不知道的问题,我肯定有人会在评论中指出这一点。

{#MyAppName}当然是在ISS文件顶部定义的声明应用程序名称的常量。您的常量可能定义不同,因此您需要在必要时更改它以匹配它。

票数 5
EN

Stack Overflow用户

发布于 2013-09-05 00:33:23

不是的。‘'unins’是硬编码在可执行文件、数据和msg文件的名称生成过程中,在inno设置源的'install.pas‘中的install.pas’过程中。

GenerateFilenames子过程有以下内容:

代码语言:javascript
复制
BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]);
UninstallExeFilename := BaseFilename + '.exe';
..

其中'I‘是一个整数,'BaseDir’是从可以更改的UninstallFilesDir派生出来的。

票数 10
EN

Stack Overflow用户

发布于 2017-10-20 16:35:21

我自己来处理的。出于Martin指出的原因,您不应该移动卸载程序可执行文件本身。但是,我同意,如果一群编号的卸载程序坐在一个目录中,没有明显的方法来判断哪一个是哪一个,这是不令人满意的。

有一种使用Inno安装所提供的设施的解决方案。在[Setup]部分:

代码语言:javascript
复制
[Setup]
...
UninstallFilesDir=Uninstall\exe\{#NAME_OF_APP}
...

然后在[Dirs]部分:

代码语言:javascript
复制
[Dirs]
...
Name: Uninstall\exe; Attribs: hidden;
Name: Uninstall\exe\{#NAME_OF_APP}; Attribs: hidden;
...

最后,您在[Icons]中创建了指向卸载程序的命名快捷方式,因为您已经隔离了它们,所以卸载程序的名称总是相同的:

代码语言:javascript
复制
[Icons]
...
Name: Uninstall\{#NAME_OF_UNINSTALLER}; Filename: Uninstall\exe\{#NAME_OF_APP}\unins000.exe
...

这使得操作系统中对卸载程序的引用不受影响,在用户通常看不到但仍然可以访问的文件夹中隐藏了令人困惑的可执行名称,并提供了命名的描述性快捷方式,这些快捷方式都可以驻留在同一个文件夹中。你也可以给快捷键一个好的图标。为了获得更好的效果,可能会在\exe目录中放置一个额外的自述文件,以解释发生了什么,以防有人吵嘴(他们自然会这么做)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18625533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档