2012-01-03 73 views
1

MSI产品代码考虑以下几点:找不到在64位Windows

我用VS2010创建一个C#.NET 32位的Windows服务(目标= 86,框架= 4.0)和相应的安装项目( .msi)程序。

我的研发机器是32位Widnows XP Professional SP3。

我有一个特殊的需求:我必须能够以编程方式从单独的32位应用程序卸载我的服务。对于这种情况,卸载应用程序必须知道卸载时要安装的服务的产品代码(以便能够调用“msiexec.exe/uninstall”)。

我已经解决了这个问题,让32位卸载应用程序通过注册表搜索安装的组件,直到遇到与我的服务名称匹配的那个,然后它获取相应的产品代码。这非常简单,而且工作得很好。

今天我试着在64位Windows 7上安装我的服务。该服务运行良好,但是当涉及到卸载时,我的32位卸载应用程序无法再在注册表中找到产品代码。这是因为32位卸载程序应用程序只能看到注册表的重定向(wow6432node)部分,而安装信息是(由于未知原因)放入原始的无向部分。

我该如何解决这个问题?

  • 我可以强制安装程序将安装信息放入注册表的重定向部分吗?

  • 我可以访问并扫描32位卸载程序应用程序中的无向注册表部分吗?

  • 我可以 - 在安装过程中 - 以某种方式检索产品代码并将其存储在另一个位置(可从我的32位卸载程序访问)?

  • 是否有另一种检索不涉及搜索注册表的产品代码的方法?

+0

另一个想法:我应该创建一个小型的64位应用程序,它可以让注册表搜索我并从我的32位卸载程序应用程序启动它? – 2012-01-03 14:29:41

+0

只有64位软件包使用64位注册表配置单元。在Wow6432Node中写入32位软件包。您使用的是64位安装程序吗? – 2012-01-03 15:47:02

+0

我使用VS2010的标准安装项目,它的目标是x86(根据顶部的指标)。我不明白为什么它会写入64位配置单元。 – 2012-01-03 16:10:02

回答

0

而是再通过注册表洞穴探险,你应该使用WiX的DTF的Microsoft.Deployment.WindowsInstaller装配,使Windows安装程序API调用来确定你正在寻找的产品代码。