0

我正在使用此代码尝试从注册表中读取

http://www.codeproject.com/KB/system/modifyregistry.aspx

如果我从 Visual Studio 运行应用程序,代码将按预期工作 - 它从注册表中读取一个密钥并成功检查它是否为 NullOrEmpty,如果是,则用户被重定向到激活页面。

如果我构建我的安装程序(WIX 3.7)并安装它,应用程序似乎忽略了激活检查。它似乎无法与注册表交互。

在 WIX 安装程序中,我强制创建应用程序密钥并强制删除应用程序密钥,最初将其留空。我已将 util:permissionEx 添加到注册表项路径中的每个键,一直到注册表值……但检查似乎被忽略了。

通过 Visual Studio 工作,安装后失败。

这是我的代码片段:

<Component Id="$(var.ProductName)RegistryKeys" Guid="A_GUID">
  <RegistryKey Id="FCSRegKey" Root="HKCU" Key="Software\CompanyName" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
    <util:PermissionEx User="$(var.ProductName)AppPool" Domain="IIS APPPOOL" Read="yes" Write="yes"
GenericRead="yes"
GenericWrite="yes"
GenericExecute="yes"
Delete="yes"
TakeOwnership="yes"/>
  <RegistryKey Key="$(var.ProductName)$(var.Version)$(var.Edition)" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
    <util:PermissionEx  User="$(var.ProductName)AppPool"
      Domain="IIS APPPOOL"
      Read="yes"
      Write="yes" GenericRead="yes" GenericWrite="yes"                                     GenericExecute="yes"
Delete="yes"
TakeOwnership="yes"/>
  <RegistryValue Type="string" Name="$(var.KeyName)" Value="" KeyPath="yes">
    <util:PermissionEx  User="$(var.ProductName)AppPool"
      Domain="IIS APPPOOL"
      Read="yes"
      Write="yes"
      GenericRead="yes"
      GenericWrite="yes"
      GenericExecute="yes"
      Delete="yes"
      TakeOwnership="yes"/>
  </RegistryValue>
</RegistryKey>
</RegistryKey>
</Component>

我到底做错了什么?

我在 64 位机器上使用 Windows 7 SP 1

干杯和感谢,

令人难以置信的沮丧。

4

1 回答 1

0

这里没有太多信息,所以这只是一个有根据的猜测。您的安装程序正在写入 32 位注册表,当您在 VS 下运行程序时,您的程序将从该注册表中读取。当它实际在 IIS 下运行时,它是一个 64 位进程,因此它从注册表的完全不同部分读取。

于 2013-07-20T19:15:15.473 回答