我有一个.NET winform安装程序。在安装之前,我正在进行注册表搜索以检查计算机上是否安装了MS Access Runtime。
搜索目标机器
搜索目标机器的属性
启动条件
发射条件的属性
但是,我想避免在启动条件的属性中对"C:\Program Files\Microsoft Office\Office15\"
之类的路径进行硬编码。
到目前为止,我已经尝试过"[ProgramFilesFolder]\Microsoft Office\Office15\", "%ProgramFiles%\Microsoft Office\Office15\"
,但两个选项均无效。
答案 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
?如果是后者,则在此提醒您有关注册表中和磁盘上的与核心位数相关的路径:
注册表 :
HKEY_LOCAL_MACHINE\SOFTWARE
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
磁盘 :
C:\Program Files\
C:\Program Files (x86)\
C:\Windows\System32\
-(是,确实)C:\Windows\SysWOW64\
-(是,确实)链接 :
答案 1 :(得分:0)
所以这就是我最终使它工作并在32位和64位Windows计算机上成功测试的方式。
我的应用程序取决于两个先决条件。 1. Crystal Report运行时。 2. Microsoft Access运行时。
因此创建了两个运行时的注册表搜索。
为每个搜索创建了属性。
每个运行时的启动条件。
如果您在每个运行时都在两个条件之间观察到,您会发现条件设置的方式有所不同。
对于Microsoft Access Runtime,我刚刚提到了为注册表搜索设置的属性名称。对于Crystal Report Runtime,我指定了值,该值是应该存在的特定版本的运行时。就我而言,我特别希望机器上存在版本“ 13.0.4”。