【发布时间】:2020-11-03 19:31:32
【问题描述】:
我已经为 PyCharm 成功创建了一个 MSI,因为安装程序在静默模式下无法正常工作。于是我有了第一次成功的 WiX 体验。
现在,我从我们的开发人员那里得到了一个要安装的文件夹。 该程序应转到“C:\ProgramFiles\Folder A\Folder B” 因为稍后会有另一个包到“C:\ProgramFiles\Folder A\Folder C”
所以,这就是我得到的(部分):
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="APPLICATIONROOTDIRECTORY" Name="Folder A"/>
<Directory Id="APPLICATIONSUBDIRECTORY" Name="Folder B"/>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="Program B"/>
</Directory>
</Directory>
我现在正在尝试创建快捷方式
<Shortcut Id="ApplicationStartMenuShortcut" Name="Program B" Target="[APPLICATIONSUBDIRECTORY]\Program B.exe" Icon="ProductIcon" WorkingDirectory="APPLICATIONSUBDIRECTORY"/>
所以,我的意图是 APPLICATIONSUBDIRECTORY = "C:\ProgramFiles\Folder A\Folder B" 但它将是 "C:\ProgramFiles\Folder B"
我发现了这个: Setting Wix shortcut with environment variable workingdirectory
但如果已经有目录结构,我宁愿不使用其他属性。
抛开这个:
<Directory Id="APPLICATIONSUBDIRECTORY" Name="Folder B"/>
使用 APPLICATIONROOTDIRECTORY 可以,但我需要第二层文件夹。
Target 属性也不喜欢这样。
使用(变量的组合)
Target="[APPLICATIONROOTDIRECTORY]\[APPLICATIONSUBDIRECTORY]\Program B.exe"
没用,但是
Target="[APPLICATIONROOTDIRECTORY]\Folder B\Program B.exe"
会。
由于我是 WiX 的新手,我仍在努力定义目录。 前 2 个目录 ID 已加入,但第三个未加入。
<Directory Id="ProgramFilesFolder">
<Directory Id="APPLICATIONROOTDIRECTORY" Name="Folder A"/>
<Directory Id="APPLICATIONSUBDIRECTORY" Name="Folder B"/>
</Directory>
这是我的批处理文件:
@echo off
SET WIXPATH=C:\Program Files (x86)\WiX Toolset v3.11\bin
SET COMPONENTGROUP=MyCompGroup
SET FILEFOLDER=Files
SET FILELIST=FileList
SET MAINFILE=Main
SET MSINAME=Program B.msi
if exist FileList.wxs del FileList.wxs
if exist *.wixobj del *.wixobj
if exist *.wixpdb del *.wixpdb
if exist *.msi del *.msi
if exist *.cab del *.cab
pause
"%wixpath%\heat.exe" dir ".\%FILEFOLDER%" -cg %COMPONENTGROUP% -dr APPLICATIONROOTDIRECTORY -out %FILELIST%.wxs -gg -ke -srd -sfrag -template fragment
"%wixpath%\candle.exe" -arch x86 %MAINFILE%.wxs %FILELIST%.wxs
"%wixpath%\light.exe" -b %FILEFOLDER% -out "%MSINAME%" %MAINFILE%.wixobj %FILELIST%.wixobj
这就是“捕获”的目录结构:
/--Files
/----Program B
/------File1
/------File2
等等
【问题讨论】:
-
您需要将“文件夹 B”作为“文件夹 A”的子目录吗?
-
是的,先生! :-) 文件夹 B 确实存在于要捕获的结构中。文件夹 A 在 WiX 文件中定义。