在Wix Installer中根据操作系统语言更改安装

时间:2014-11-26 11:07:54

标签: wix registry

我一直在使用Wix安装程序来创建安装程序,安装程序在安装期间注册了一个端口(使用netsh.exe)。一切都很好。但后来我尝试在法语的Windows 7操作系统上安装该应用程序...安装程序无法注册该端口,因为netsh命令是为en-US编写的。 以下命令在en-US机器上正常工作:

netsh.exe http add 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?>

但这不起作用,因为它没有得到价值&#34; 00000409&#34;并且总是去其他条件,这是法国和机器在en-US。

请帮忙吗?

3 个答案:

答案 0 :(得分:2)

使用本地化的Wix属性(自定义操作)来解析正确的名称,请参阅doc:http://wixtoolset.org/documentation/manual/v3/customactions/osinfo.html(网站已关闭,因此我无法确认正确的链接)或google WixQueryOsWellKnownSID

在你的例子中,我假设你指的是&#34;用户&#34;分组,以使其工作添加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" />

有了这个,你不需要为不同的语言环境设置不同的自定义操作。

答案 1 :(得分:1)

<?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)"

答案 2 :(得分:0)

感谢IlirB

问题已解决。剧本中的变化很小:

而不是 user = \ [WIX_ACCOUNT_USERS] 应该 user = [WIX_ACCOUNT_USERS]