Wix安装程序TARGETDIR INSTALLDIR设置为E:\
我正在努力与Wix安装程序。在安装过程中,INSTALLDIR被覆盖到自定义文件夹(不在程序文件中)。当我卸载时,INSTALLDIR和TARGETDIR被设置为E:\无论我做什么 我该如何解决这个问题?以下是相关片段:Wix安装程序TARGETDIR INSTALLDIR设置为E:\,wix,Wix,我正在努力与Wix安装程序。在安装过程中,INSTALLDIR被覆盖到自定义文件夹(不在程序文件中)。当我卸载时,INSTALLDIR和TARGETDIR被设置为E:\无论我做什么 我该如何解决这个问题?以下是相关片段: <Property Id="ARPINSTALLLOCATION"> <RegistrySearch Id="GetINSTALLDIRFromRegistry" Root="HKLM" Key="Software\Microsof
<Property Id="ARPINSTALLLOCATION">
<RegistrySearch Id="GetINSTALLDIRFromRegistry" Root="HKLM"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductCode]" Name="InstallLocation" Type="raw" />
</Property>
<SetDirectory Id="TARGETDIR" Value="[ARPINSTALLLOCATION]">Installed</SetDirectory>
<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CreateFolders" Sequence="execute">NOT Installed</SetProperty>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR" Name="WinApp">
</Directory>
</Directory>
</Fragment>
安装
未安装
提前谢谢。我正在使用Wix工具3.10
更新1
以下是我的发现(目前。请纠正我,因为我对Wix还是新手)
- 与普遍的看法相反,安装程序似乎不会在卸载过程中自动设置安装文件夹
- 上述规则的一个重要例外是,安装文件夹是“众所周知”的文件夹,如ProgramFilesFolder
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR">
<Directory Id="TEST" Name="WinApp" />
</Directory>
</Directory>
</Fragment>
必须通过属性分配或自定义操作设置INSTALLDIR目录。例如:
<Property Id="INSTALLDIR"><![CDATA[C:\mydir1\mydir1]]></Property>
如果通过对话框动态设置INSTALLDIR,则必须从注册表或文件(安装期间存储该文件的位置)读取它
更新2
略加改进的版本
<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" Sequence="execute" After="InstallFiles" />
<Property Id="INSTALLDIR" Secure="yes">
<RegistrySearch Id="Locate_EXISTINGINSTALLDIR" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductCode]" Name="InstallLocation" Type="directory" />
</Property>
<CustomAction Id="SetTARGETDIR"
Directory="TARGETDIR"
Value="[INSTALLDIR]"
Return="check" />
<InstallExecuteSequence>
<!--this action launches a window to allow the user to choose the folder. don't want
to use standard MSI/Wix dialogs as the functionality is limited
-->
<Custom Action='SelectFolderCustomAction' Before='CreateFolders'>NOT Installed</Custom>
<!--<Custom Action='RegistrationInfoCustomAction' Before='InstallFinalize'>NOT Installed</Custom>-->
<!--<Custom Action='UninstallCustomAction' Before='RemoveFiles'>Installed AND REMOVE = "ALL"</Custom>-->
<Custom Action="SetTARGETDIR" Before="RemoveFiles">Installed AND REMOVE = "ALL"</Custom>
</InstallExecuteSequence>
未安装
已安装并删除=“全部”
删除SetDirectory
元素,它已过时。当产品已安装时,Windows Installer会自动将目录属性设置为实际安装目录的路径
arpsinstalllocation
的RegistrySearch
看起来也很奇怪。通常,此属性只应在首次安装期间设置,您已经使用SetProperty
元素进行了设置
因此,以下几点就足够了:
<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CreateFolders" Sequence="execute">NOT Installed</SetProperty>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR" Name="WinApp"/>
</Directory>
</Fragment>
未安装
我不明白上面你想做什么。为什么要从注册表中读取安装位置
这是我安装到“D:\Program Files”文件夹的步骤
Windows Installer自动设置目录属性==>我就是这么想的。根据您的回答,我删除了注册表内容,但它没有从INSTALL位置卸载文件夹及其内容。我打开了日志记录,您可以看到结果:MSI(c)(6C:80)[14:35:52:803]:属性更改:添加TARGETDIR属性。其值为“E:\”。MSI(c)(6C:80)[14:35:52:803]:属性更改:添加INSTALLDIR属性。它的值为“E:\”。@user34332然后在第一次安装期间未正确设置INSTALLDIR
propably。您可以将设置INSTALLDIR
的代码添加到您的帖子中吗?安装目录是在自定义操作中设置的。用户选择文件夹。在自定义操作session.SetTargetPath(“INSTALLDIR”、“c:\\company\\product”)中,它是这样设置的。如果我在片段中将它设置为一个众所周知的目录,比如ProgramFiles,它就可以正常工作。这只是用于卸载。对于安装,他们从自定义对话框中选择它。我漏掉了那个密码。如果我不读它,它就会被设置为E:\。
<Property Id="ROOTDRIVE"><![CDATA[D:\]]></Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles" Name="Program Files">