wix
  • windows-installer
  • 2012-08-09 30 views 2 likes 
    2

    我的程序將安裝到註冊表中的一個路徑,該註冊表對單個用戶和所有用戶有兩個不同的值。WiX - 我如何爲所有用戶和單用戶獲取不同的註冊表項

    所以我想有這樣的:

    <Property Id="MYINSTALLDIR"> 
        if single user, then <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' /> 
        else if ALLUSERS, then <RegistrySearch Id='MyRegistry' Type='raw' Root='HKLM' Key='Software\MyApp\Foo' Name='InstallDir' /> 
    </Property>  
    

    這可能嗎?

    回答

    2

    將兩個註冊表搜索執行到兩個不同的屬性,然後使用SetProperty自定義操作將兩個屬性中的一個分配給基於哪個具有數據和哪個具有更高優先級的實值屬性(使用條件驅動執行)。

    +0

    對不起,我對WiX的知識非常有限,所以不知道你是否可以詳細一點。例如,如何編寫SetProperty自定義操作? – Deqing 2012-08-13 09:26:31

    0

    最後,它是工作,現在...

    隨着繼WXS文件片段,ALLUSER=12可以傳遞給msiexec,使HKLM註冊表搜索。

    <Property Id="INSTALLDIR1"> 
        <RegistrySearch Id='RegistryCU' Type='raw' Root='HKCU' Key='Software\Foo' Name='InstallDir' /> 
    </Property> 
    
    <Property Id="INSTALLDIR2"> 
        <RegistrySearch Id='RegistryLM' Type='raw' Root='HKLM' Key='Software\Foo' Name='InstallDir' /> 
    </Property> 
    
    <CustomAction Id="PerUserInstall" Property="InstallDir" Value="[INSTALLDIR1]" Execute="immediate" /> 
    <CustomAction Id="PerMachineInstall" Property="InstallDir" Value="[INSTALLDIR2]" Execute="immediate" /> 
    <InstallExecuteSequence> 
        <Custom Action="PerUserInstall" After="AppSearch">ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged))</Custom>  
        <Custom Action="PerMachineInstall" After="AppSearch">ALLUSERS=1 OR (ALLUSERS=2 AND Privileged)</Custom> 
    </InstallExecuteSequence> 
    

    在我的情況下,HKCU和HKLM都包含的價值觀和他們有相同的優先級,這樣做的唯一方法是在命令行設置的ALLUSER屬性。

    相關問題