Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 我无法检索ARPINSTALLLOCATION,因此我们知道在何处安装新版本_Installation_Wix_Location - Fatal编程技术网

Installation 我无法检索ARPINSTALLLOCATION,因此我们知道在何处安装新版本

Installation 我无法检索ARPINSTALLLOCATION,因此我们知道在何处安装新版本,installation,wix,location,Installation,Wix,Location,我试图在安装软件的主要升级版本期间检索ARPSInstallLocation 接下来,我设法将arpsInstallLocation设置为自定义路径 但是,再次检索它不起作用。在过去的几天里,我尝试了很多方法,但它会保持默认的安装路径,而不是自定义路径 <InstallUISequence> <AppSearch After="FindRelatedProducts"/> ... </InstallUISequence> <Property I

我试图在安装软件的主要升级版本期间检索ARPSInstallLocation

接下来,我设法将arpsInstallLocation设置为自定义路径

但是,再次检索它不起作用。在过去的几天里,我尝试了很多方法,但它会保持默认的安装路径,而不是自定义路径

<InstallUISequence>
  <AppSearch After="FindRelatedProducts"/>
  ...
</InstallUISequence>

<Property Id="WIXUI_INSTALLDIR" Value="APPROOTDIRECTORY">
  <RegistrySearch Id="FindInstallLocation"
      Root="HKLM"
      Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]"
      Name="InstallLocation"
      Type="raw" />
</Property>

...
在自定义WixUI\u InstallDir UI中,我在CustomInstallDirDlg中有这个

<Control Id="Folder" Type="PathEdit" X="20" Y="90" Width="260" Height="18" Property="WIXUI_INSTALLDIR" Indirect="yes" />

替代安装路径位于注册表中,但未在控件中检索和显示。我做错了什么

-Birkoff

从内存(以及我们所做的)最佳实践是将安装位置保存到我们自己的注册表项中。我们也写
arpsInstallLocation
,但从不尝试从中读取。下面是我们生产代码中的一个示例,它设计用于默认的嵌套安装位置(即
程序文件\公司\应用程序\
),在UI和静默安装、升级等方面都可以正常工作

    <!-- Look for previously saved install location -->
    <Property Id="APPLICATIONFOLDER" Secure="yes">
        <RegistrySearch Id="RegSearch_APPLICATIONFOLDER" Root="HKLM" Key="SOFTWARE\ACME\MyApp" Name="installpath" Type="raw" />
    </Property>

    <!-- Set UI default for fresh install -->
    <Property Id="ApplicationFolderName" Value="ACME\MyApp" />

    <!-- Overwrite variable to avoid runtime error  -->
    <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />

    <!-- Directory structure(s) -->
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="ACME" Name="ACME">
                <Directory Id="APPLICATIONFOLDER" Name="MyApp" DiskId="1">
                                   <!-- ... -->
                </Directory>
            </Directory>
        </Directory>
    </Directory>

从内存(以及我们所做的)最佳实践是将安装位置保存到我们自己的注册表项中。我们也写
arpsInstallLocation
,但从不尝试从中读取。下面是我们生产代码中的一个示例,它设计用于默认的嵌套安装位置(即
程序文件\公司\应用程序\
),在UI和静默安装、升级等方面都可以正常工作

    <!-- Look for previously saved install location -->
    <Property Id="APPLICATIONFOLDER" Secure="yes">
        <RegistrySearch Id="RegSearch_APPLICATIONFOLDER" Root="HKLM" Key="SOFTWARE\ACME\MyApp" Name="installpath" Type="raw" />
    </Property>

    <!-- Set UI default for fresh install -->
    <Property Id="ApplicationFolderName" Value="ACME\MyApp" />

    <!-- Overwrite variable to avoid runtime error  -->
    <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />

    <!-- Directory structure(s) -->
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="ACME" Name="ACME">
                <Directory Id="APPLICATIONFOLDER" Name="MyApp" DiskId="1">
                                   <!-- ... -->
                </Directory>
            </Directory>
        </Directory>
    </Directory>


谢谢你,萨沙。在您的帮助下,我可以进行一些更改,现在可以从注册表中检索该值。我真的不明白为什么要设置ARPSInstallLocation,以后不再使用它,所以我修改了我的代码如下:

<InstallUISequence> 
  <FindRelatedProducts Before="AppSearch"/> 
  ... 
</InstallUISequence> 

<Property Id="APPROOTDIRECTORY" Secure="yes">
  <RegistrySearch Id="FindInstallLocation"
      Root="HKLM"
      Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]"
      Name="InstallLocation"
      Type="raw" />
</Property>

<Property Id="WIXUI_INSTALLDIR" Value="APPROOTDIRECTORY" />

... 

安装程序现在可以正确检索以前安装的位置。希望这对其他人也有帮助。

谢谢萨沙。在您的帮助下,我可以进行一些更改,现在可以从注册表中检索该值。我真的不明白为什么要设置ARPSInstallLocation,以后不再使用它,所以我修改了我的代码如下:

<InstallUISequence> 
  <FindRelatedProducts Before="AppSearch"/> 
  ... 
</InstallUISequence> 

<Property Id="APPROOTDIRECTORY" Secure="yes">
  <RegistrySearch Id="FindInstallLocation"
      Root="HKLM"
      Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[OLDERVERSIONBEINGUPGRADED]"
      Name="InstallLocation"
      Type="raw" />
</Property>

<Property Id="WIXUI_INSTALLDIR" Value="APPROOTDIRECTORY" />

... 

安装程序现在可以正确检索以前安装的位置。希望这对其他人也有帮助。

您也可以搜索组件的键路径,然后不必指定注册表路径您也可以搜索组件的键路径,然后不必指定注册表路径