我希望这还没有得到解答,但我觉得我已经阅读了整个互联网上的所有相关文章......
我需要将Installer的DefaultLocation属性默认为C:\或D:\(理想情况下这里会有逻辑,但我已经知道无法完成,因为在安装文件后执行自定义操作)。
我看到的问题是,如果我使用[TARGETDIR]或[ROOTDRIVE]属性,通常默认为C:\或D:\,那么如果用户选择不同的安装位置,安装程序将忽略该位置他们选择了。
例如在我的机器上[ROOTDRIVE]解析为C:。如果我告诉安装程序D:\,它会安装到C:\无论如何。 [TARGETDIR]和[ROOTDRIVE]属性都会发生这种情况。
有没有人看过这个或知道为什么会这样?
谢谢, 史蒂夫
答案 0 :(得分:1)
您不希望设置TARGETDIR
,因为此默认设置为具有最大可用空间量的驱动器,通常您使用INSTALLDIR
或APPLICATIONFOLDER
之类的内容用户自定义该属性。下面的WiX示例默认为C:\Program Files\ACME Xyz\My Program
,但如果用户将APPLICATIONFOLDER
的位置更改为D:\blahblahblah
,则文件将安装在那里。
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MyCo" Name="ACME Xyz">
<Directory Id="APPLICATIONFOLDER" Name="My Program" DiskId="1">
</Directory>
</Directory>
</Directory>
</Directory>
编辑:: 在这种情况下,只需使用即时自定义操作即可。例如
<CustomAction Id="SetInstallFolder" Property="APPLICATIONFOLDER" Value="D:\" Execute="immediate" />
<InstallExecuteSequence>
<Custom Action="SetInstallFolder" Before="CostFinalize">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="SetInstallFolder" Before="CostFinalize">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
</InstallUISequence>
答案 1 :(得分:0)
我只是想知道为什么Visual Studio安装程序会发生这种情况,更重要的是如何纠正它。
有一个名为“PackageAs”的属性,可以在Visual Studio中访问安装文件中使用的每个文件。默认情况下,此属性设置为“vsdpaDefault”,根据我能够发现的一小部分信息导致文件被压缩,从而更改文件,然后更改LastModifiedDate。
这可以通过将您希望维护LastModifiedDate的文件更改为PackageAs“vsdpaLoose”来解决。这会导致文件不被压缩并保持其属性。
希望其他人会遇到同样的问题并发现它很有用。