即使选择了其他目录,Windows Installer也会安装到Defaultlocation

时间:2011-01-05 19:58:34

标签: windows installer windows-installer

我希望这还没有得到解答,但我觉得我已经阅读了整个互联网上的所有相关文章......

我需要将Installer的DefaultLocation属性默认为C:\或D:\(理想情况下这里会有逻辑,但我已经知道无法完成,因为在安装文件后执行自定义操作)。

我看到的问题是,如果我使用[TARGETDIR]或[ROOTDRIVE]属性,通常默认为C:\或D:\,那么如果用户选择不同的安装位置,安装程序将忽略该位置他们选择了。

例如在我的机器上[ROOTDRIVE]解析为C:。如果我告诉安装程序D:\,它会安装到C:\无论如何。 [TARGETDIR]和[ROOTDRIVE]属性都会发生这种情况。

有没有人看过这个或知道为什么会这样?

谢谢, 史蒂夫

2 个答案:

答案 0 :(得分:1)

您不希望设置TARGETDIR,因为此默认设置为具有最大可用空间量的驱动器,通常您使用INSTALLDIRAPPLICATIONFOLDER之类的内容用户自定义该属性。下面的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”来解决。这会导致文件不被压缩并保持其属性。

希望其他人会遇到同样的问题并发现它很有用。