当另一个用户首次登录安装了应用程序时,Wix安装程序默认为原始属性值

时间:2015-02-15 08:22:52

标签: c# wix

我有一个Wix安装程序,我在其中定义了一个属性(Product.wxs):

<Property Id="SITEBASE" Value="localhost"/>

<Component Id="ApplicationSettings">
    <File Id="ApplicationConfig" Name="MyApplication.exe.config" Source="$(var.Application.TargetPath).config"/>
    <util:XmlFile
      Id="ApplicatonConfig1"
      File="[INSTALLDIR]MyApplication.exe.config"
      Action="setValue"
      Value="[SITEBASE]"
      ElementPath="//MyApp.Properties.Settings/setting[\[]@name='SiteBase'[\]]/value"
      Permanent="yes"
      Sequence="1" />


<Component Id="ApplicationSettings">
    <File Id="ApplicationConfig" Name="MyApplication.exe.config" Source="$(var.Application.TargetPath).config"/>
    <util:XmlFile
      Id="ApplicatonConfig1"
      File="[INSTALLDIR]MyApplication.exe.config"
      Action="setValue"
      Value="[SITEBASE]"
      ElementPath="//MyApp.Properties.Settings/setting[\[]@name='SiteBase'[\]]/value"
      Permanent="yes"
      Sequence="1" />

我的源MyApplication.exe.config有SiteBase =“http://localhost/AnotherValueForTesting

我有一个Dialog,我在其中设置SiteBase的值(从Property SITEBASE开始,因此将显示:localhost

如果我将应用程序安装为TestUser1,将localhost更改为1.1.1.1配置文件具有输入的值(1.1.1.1),一切都很好。我可以重启并使用TestUser1登录,一切都还不错。

如果我以TestUser2身份登录,TestUser2的值现在将具有“localhost”(属性的默认值)

然后我可以卸载,重新安装(使用1.1.1.1值),当我以TestUser1 / 2登录时,都有1.1.1.1。

如果我以TestUser3身份登录,TestUser3再次拥有localhost,而不是1.1.1.1。我在app.config中使用不同的值进行测试,以确定该值肯定默认为为Property Id“SITEBASE”设置的值而不是app.config中的原始值

PS:Package InstallScope =“perMachine”

2 个答案:

答案 0 :(得分:0)

简短的回答是,你可能对正确再次运行的安装程序有所了解。它的一个功能是,如果您在用户配置文件目录中有一个文件(因此最初只为该用户安装),然后另一个用户使用该应用程序,Windows将注意到该用户缺少该文件并安装它。正则应用程序将文件定义为在用户文件夹中,所有用户也都需要该文件。

如果这不正是发生了什么,那么安装的产品可能会以某种方式破坏,而Windows正在修复它。

无论哪种方式,如果您查看事件日志,应该有MsiInstaller条目引用缺少的组件,引用您可以在设置中查找的guid。这可能有所帮助。

答案 1 :(得分:0)

我们团队中有人发现了这个问题。 应用程序日志有:

  1. 检测产品&#39; {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}&#39;,功能&#39; ProductFeature&#39;,组件&#39; {xxxxxxxx-xxxx-xxxx -xxxx-XXXXXXXXXXXX}&#39;失败。资源&#39; HKEY_CURRENT_USER \ Software \ XXX \ YYY \&#39;不存在。

  2. 检测产品&#39; {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}&#39;,功能&#39; ProductFeature&#39;在组件请求期间失败&#39; {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}&#39;

  3. 开始Windows Installer事务:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}。客户流程ID:19300。

  4. Windows Installer重新配置了该产品。产品名称:YYY。产品版本:1.0.0。产品语言:1033。制造商:XXX。重新配置成功或错误状态:0。

  5. 产品:YYY - 配置成功完成。

  6. 结束Windows Installer事务:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}。客户流程ID:19300。

  7. 安装程序在HKCU下创建一个注册表项。因为这是一个按用户设置,所以对于下一个用户来说它并不存在,因此开始进行MSI修复。

    将其更改为安装到HKLM而不是HKCU看起来已经解决了问题