对.NET Windows Installer应用程序执行注册表搜索

时间:2019-05-06 11:51:30

标签: windows winforms windows-installer

我有一个.NET winform安装程序。在安装之前,我正在进行注册表搜索以检查计算机上是否安装了MS Access Runtime。

搜索目标机器

搜索目标机器的属性

启动条件

发射条件的属性

但是,我想避免在启动条件的属性中对"C:\Program Files\Microsoft Office\Office15\"之类的路径进行硬编码。 到目前为止,我已经尝试过"[ProgramFilesFolder]\Microsoft Office\Office15\", "%ProgramFiles%\Microsoft Office\Office15\",但两个选项均无效。

2 个答案:

答案 0 :(得分:0)

  

正确的注册表搜索 :尝试搜索适当的注册表 32-bit section :    SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE

     

关键的是在字符串的开头包含 Wow6432Node


自定义操作 :最佳实践不被接受,但是我喜欢使用自定义操作来检查系统(I don't like them for making system updates)。检查自定义操作是只读的,不需要任何回滚,对系统没有危险,您可以相对安全地抑制错误。

我喜欢检查自定义操作的原因是,如果系统检查要求变得更加复杂,您将具有完全的灵活性。我发现AppSearch有时会变得很混乱。 自定义操作在Visual Studio Installer项目中不容易使用


位数 :我不太使用应用搜索,但这是 actual 32-bit machine (非常漂亮的年份)还是 64-bit machine with 32-bit components ?如果是后者,则在此提醒您有关注册表中和磁盘上的与核心位数相关的路径

注册表

  • 64位 HKEY_LOCAL_MACHINE\SOFTWARE
  • 32位 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node

磁盘

  • 64位 C:\Program Files\
  • 32位 C:\Program Files (x86)\
  • 64位 C:\Windows\System32\ -(是,确实)
  • 32位 C:\Windows\SysWOW64\ -(是,确实)

链接

答案 1 :(得分:0)

所以这就是我最终使它工作并在32位和64位Windows计算机上成功测试的方式。

我的应用程序取决于两个先决条件。 1. Crystal Report运行时。 2. Microsoft Access运行时。

因此创建了两个运行时的注册表搜索。

enter image description here enter image description here enter image description here

为每个搜索创建了属性。

enter image description here

enter image description here

enter image description here

enter image description here

每个运行时的启动条件。​​

enter image description here

enter image description here

enter image description here

如果您在每个运行时都在两个条件之间观察到,您会发现条件设置的方式有所不同。

对于Microsoft Access Runtime,我刚刚提到了为注册表搜索设置的属性名称。对于Crystal Report Runtime,我指定了值,该值是应该存在的特定版本的运行时。就我而言,我特别希望机器上存在版本“ 13.0.4”。