正在对.NET windows installer应用程序执行注册表搜索

正在对.NET windows installer应用程序执行注册表搜索,windows,winforms,windows-installer,Windows,Winforms,Windows Installer,我有一个.NET winform安装程序应用程序。在安装之前,我正在进行注册表搜索,以检查机器上是否安装了MS Access运行时 搜索目标机器 搜索目标机的性质 发射条件 发射条件的性质 但是,我希望避免在启动条件的属性中硬编码路径,如“C:\Program Files\Microsoft Office\Office15\”。 到目前为止,我已经尝试了“[ProgramFilesFolder]\Microsoft Office\Office15\”,“%ProgramFiles%\Mi

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

搜索目标机器

搜索目标机的性质

发射条件

发射条件的性质

但是,我希望避免在启动条件的属性中硬编码路径,如
“C:\Program Files\Microsoft Office\Office15\”
。 到目前为止,我已经尝试了
“[ProgramFilesFolder]\Microsoft Office\Office15\”,“%ProgramFiles%\Microsoft Office\Office15\”
,但这两个选项都不起作用

正确的注册表搜索:尝试搜索注册表的适当的
32位部分
SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App path\MSACCESS.EXE

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


自定义操作:这不是公认的最佳实践,但我喜欢使用自定义操作来检查系统()。检查自定义操作是只读的,不需要任何回滚,对系统没有危险,并且可以相对安全地抑制错误

我喜欢检查自定义操作的原因是,如果系统检查需求变得更复杂,您可以有充分的灵活性。我发现AppSearch有时会变得非常混乱自定义操作不容易与Visual Studio安装程序项目一起使用


比特度:我不太使用应用程序搜索,但这是一台真正的32位机器(相当老式)还是一台带有32位组件的64位机器?对于后者,这里有一个关于注册表和磁盘上的核心位相关路径的提示:

注册表

  • 64位
    HKEY\U LOCAL\U MACHINE\软件
  • 32位
    HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node
磁盘

  • 64位
    C:\ProgramFiles\
  • 32位
    C:\ProgramFiles(x86)\
  • 64位
    C:\Windows\System32\
    (是的,真的)
  • 32位
    C:\Windows\SysWOW64\
    (是的,真的)

链接

  • -注册地点
正确的注册表搜索:尝试搜索注册表的适当的
32位部分
SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App path\MSACCESS.EXE

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


自定义操作:这不是公认的最佳实践,但我喜欢使用自定义操作来检查系统()。检查自定义操作是只读的,不需要任何回滚,对系统没有危险,并且可以相对安全地抑制错误

我喜欢检查自定义操作的原因是,如果系统检查需求变得更复杂,您可以有充分的灵活性。我发现AppSearch有时会变得非常混乱自定义操作不容易与Visual Studio安装程序项目一起使用


比特度:我不太使用应用程序搜索,但这是一台真正的32位机器
(相当老式)还是一台带有32位组件的64位机器
?对于后者,这里有一个关于注册表和磁盘上的核心位相关路径的提示:

注册表

  • 64位
    HKEY\U LOCAL\U MACHINE\软件
  • 32位
    HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node
磁盘

  • 64位
    C:\ProgramFiles\
  • 32位
    C:\ProgramFiles(x86)\
  • 64位
    C:\Windows\System32\
    (是的,真的)
  • 32位
    C:\Windows\SysWOW64\
    (是的,真的)

链接

  • -注册地点

因此,我最终实现了这一功能,并在32位和64位Windows机器上成功地进行了测试

我的申请取决于两个先决条件。 1.Crystal报表运行时。 2.Microsoft Access运行时

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

和创建的每个搜索的属性

每个运行时的启动条件

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


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

因此,我最终实现了这一功能,并在32位和64位Windows机器上成功地进行了测试

我的申请取决于两个先决条件。 1.Crystal报表运行时。 2.Microsoft Access运行时

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