簡體   English   中英

在Wix Installer中根據操作系統語言更改安裝

[英]Change the installation based on the OS language in Wix Installer

我一直在使用Wix安裝程序來創建安裝程序,安裝程序在安裝期間注冊了一個端口(使用netsh.exe)。 一切都很好。 但后來我嘗試在法語的Windows 7操作系統上安裝該應用程序...安裝程序無法注冊該端口,因為netsh命令是為en-US編寫的。 以下命令在en-US機器上正常工作:

netsh.exe http添加urlacl url = http:// +:6700 / Demo101 / user = \\ users但在fr-FR OS上失敗。

對於fr-FR我需要跑

netsh.exe http add urlacl url = http:// +:6700 / Demo101 / user = \\ utilisateurs

我在Wix項目中做了以下更改:

<?define langLocale = [OSINSTALLEDLOCALE]?>


<?if $(var.langLocale) = "00000409"?>
<!-- Firewall exception -->
<CustomAction Id="ListenerServiceAddReservation"
              Execute="deferred"
              Impersonate="no"
              Directory="INSTALLLOCATION"
              ExeCommand="[SystemFolder]netsh.exe http add urlacl url=http://+:6700/Demo101/ user=\users"
              Return="asyncWait" />
<?else?>
<CustomAction Id="ListenerServiceAddReservation"
          Execute="deferred"
          Impersonate="no"
          Directory="INSTALLLOCATION"
          ExeCommand="[SystemFolder]netsh.exe http add urlacl url= http://+:6700/Demo101/ user=\utilisateurs"
          Return="asyncWait" />
<?endif?>

但是這不起作用,因為它沒有得到值“00000409”並且總是進入法國和機器在en-US的其他條件。

有什么幫助嗎?

使用本地化的Wix屬性(自定義操作)來解析正確的名稱,請參閱doc: http//wixtoolset.org/documentation/manual/v3/customactions/osinfo.html (網站現在已關閉,因此我無法確認正確的鏈接)或谷歌WixQueryOsWellKnownSID

在您的示例中,我假設您指的是“用戶”組,以便讓它工作添加PropertyRef

<PropertyRef Id="WIX_ACCOUNT_USERS"/>

然后在自定義操作中使用[WIX_ACCOUNT_USERS]屬性,該屬性將解析以更正內置Windows用戶和組的組名。

<CustomAction Id="ListenerServiceAddReservation"
              Execute="deferred"
              Impersonate="no"
              Directory="INSTALLLOCATION"
              ExeCommand="[SystemFolder]netsh.exe http add urlacl url=http://+:6700/Demo101/ user=[WIX_ACCOUNT_USERS]"
              Return="asyncWait" />

有了這個,您將不需要為不同的區域設置具有不同的自定義操作。

<?if?><?else?>語句是預處理程序的東西,它們在編譯時解析。 那不行。 這里的關鍵是內置用戶和組的SID是不變的,因此您需要使用S-1-5-32-545

在WiX v3.10 / v4.0及更高版本中,您可以使用WixHttpExtension

<http:UrlReservation Url="http://+:6700/Demo101/">
    <http:UrlAce SecurityPrincipal="*S-1-5-32-545" Rights="register" />
</http:UrlReservation>

使用netsh:

netsh.exe http add urlacl url= http://+:6700/Demo101/ sddl= "O:BAG:BAD:(A;;GX;;;S-1-5-32-545)"

感謝IlirB

問題得到解決。 腳本中的變化很小:

而不是user = \\ [WIX_ACCOUNT_USERS]應該是user = [WIX_ACCOUNT_USERS]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM