inno-setup - 将 DIR 开关与 Inno Setup 命令行一起使用
问题描述
剧本
我创建了这个简单的脚本:
[ISPP]
; SignTool parameters
#define SignedDesc "$qxxx$q"
#define SignedPfx "$qxxx$q"
#define SignedTimeStamp "$qhttp://timestamp.verisign.com/scripts/timestamp.dll$q"
#define SignedPw "$qxxx$q"
#define AppURL "http://www.publictalksoftware.co.uk"
#define AppPublisher "Andrew Truckle"
[Setup]
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True
UsePreviousSetupType=False
UsePreviousTasks=False
UsePreviousLanguage=False
FlatComponentsList=False
AlwaysShowComponentsList=False
ShowComponentSizes=False
AppName=Public Talks Help Documentation
AppVersion=19.0.0
CreateAppDir=False
Uninstallable=no
OutputBaseFilename=PublicTalksHelpDocumentationSetup
SourceDir=D:\My Programs\2019\CommunityTalks\HelpNDoc\CHM
SignTool=SignTool /d {#SignedDesc} /du $q{#AppURL}$q /f {#SignedPfx} /p {#SignedPw} /t {#SignedTimeStamp} /v $f
AppId={{xxx}
[Files]
Source: "CommunityTalks.chm"; DestDir: "{app}"; Flags: ignoreversion
如您所见,它非常简单。它旨在由我的主应用程序执行。
测试
我决定尝试通过使用批处理文件进行测试来模拟我的应用程序将执行的操作。这是批处理文件命令:
PublicTalksHelpDocumentationSetup /SP- /VERYSILENT /DIR="C:\Program Files (x86)\Public Talks" /LOG=".\TestInstallLog.txt"
结果
从表面上看,我认为它有效。除了被要求允许应用程序运行之外,我没有在屏幕上看到任何内容。但是我在指定的文件夹中找不到该文件DIR
。
于是我又看了一下日志:
2019-05-31 21:32:02.971 Log opened. (Time zone: UTC+01:00)
2019-05-31 21:32:02.971 Setup version: Inno Setup version 6.0.2 (u)
2019-05-31 21:32:02.971 Original Setup EXE: D:\My Programs\2019\CommunityTalks\HelpNDoc\CHM\Output\PublicTalksHelpDocumentationSetup.exe
2019-05-31 21:32:02.971 Setup command line: /SL5="$15002A,25665310,721408,D:\My Programs\2019\CommunityTalks\HelpNDoc\CHM\Output\PublicTalksHelpDocumentationSetup.exe" /SPAWNWND=$30900 /NOTIFYWND=$30914 /SP- /VERYSILENT /DIR="C:\Program Files (x86)\Public Talks" /LOG=".\TestInstallLog.txt"
2019-05-31 21:32:02.971 Windows version: 10.0.17763 (NT platform: Yes)
2019-05-31 21:32:02.972 64-bit Windows: Yes
2019-05-31 21:32:02.972 Processor architecture: x64
2019-05-31 21:32:02.972 User privileges: Administrative
2019-05-31 21:32:02.973 Administrative install mode: Yes
2019-05-31 21:32:02.973 Install mode root key: HKEY_LOCAL_MACHINE
2019-05-31 21:32:02.973 64-bit install mode: No
2019-05-31 21:32:02.979 Created temporary directory: C:\Users\ajtru\AppData\Local\Temp\is-1NT54.tmp
2019-05-31 21:32:03.227 Calling RestartManager's RmGetList.
2019-05-31 21:32:03.350 RmGetList finished successfully.
2019-05-31 21:32:03.350 RestartManager found no applications using one of our files.
2019-05-31 21:32:03.356 Starting the installation process.
2019-05-31 21:32:03.360 -- File entry --
2019-05-31 21:32:03.360 Dest filename: C:\WINDOWS\CommunityTalks.chm
2019-05-31 21:32:03.364 Time stamp of our file: 2019-05-30 18:35:24.000
2019-05-31 21:32:03.364 Installing the file.
2019-05-31 21:32:03.539 Successfully installed the file.
2019-05-31 21:32:03.539 Installation process succeeded.
2019-05-31 21:32:03.539 Need to restart Windows? No
2019-05-31 21:32:03.541 Deinitializing Setup.
2019-05-31 21:32:03.557 Log closed.
注意?为什么将它安装到Windows文件夹中?
2019-05-31 21:32:03.360 Dest filename: C:\WINDOWS\CommunityTalks.chm
如何指定我实际希望将文件安装到的文件夹?
更新
我发现了一个关于使用自定义参数的类似问题。所以我把它改成:
Source: "CommunityTalks.chm"; DestDir: "{param:InstallPath}"; Flags: ignoreversion
我将命令行从使用调整为DIR
,InstallPath
但恕我直言DIR
应该已经足够了。
选择
我假设我可以使用这个 Pascal 脚本,也许可以使用它?然后我不需要传递文件夹:
// Returns the path where the program was last installed
function GetPathInstalled( AppID: String ): String;
var
sPrevPath: String;
begin
sPrevPath := '';
if not RegQueryStringValue( HKLM,
'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppID+'_is1',
'Inno Setup: App Path', sPrevpath) then
RegQueryStringValue( HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppID+'_is1' ,
'Inno Setup: App Path', sPrevpath);
Result := sPrevPath;
end;
因为我知道应用程序 ID。如果他们移动程序或其他东西,传递它的好处将迎合。但我的问题仍然是关于 DIR 的失败。
解决方案
如果设置为
no
,则不会为应用程序创建目录,不会显示Select Destination Location向导页面,并且{app}
目录常量等同于{win}
目录常量。
推荐阅读
- python - python- 在 python gui 中打开纯 pdf 页面,而不在图像中转换它们
- r - 使用 Shiny 循环中的动态图渲染动态选项卡
- delphi - 如何从 Delphi 中的 WebView 获取元素列表?
- javascript - 我想使用 Javascript 操作 CSS
- vuejs2 - 哪个是使用 VuePhoneNumberInput 的 :only-countries 的有效格式?
- spring-webflux - Spring Cloud Reactor Sleuth - 使用 WebClient 发送请求时未使用新跨度 ID 设置 MDC
- python - python json.dumps 在字符串 <14> 和 \x00 的开头和结尾添加符号
- gatsby - 尝试在 Gatsby 中实现身份验证的“窗口”问题
- sharepoint-2013 - 将列表列复制到 Sharepoint 中同一列表的新列
- cron - 如何创建我自己的日历,而不是像石英调度程序中的假日日历那样排除日期