仅当用户计算机上尚未安装程序时,如何启动自定义操作中指定的可执行文件?

How to launch an executable specified in a custom action only when it is not already installer on the user computer?

我正在使用 Visual Studio 2015 安装项目模板构建安装可执行文件。

我在我的包的文件系统中添加了一个外部可执行文件,用户需要安装它才能运行我的程序。然后,我将这个包添加为 Commit 上的自定义操作。

我希望我的安装包通过查看计算机上某个文件夹结构的注册表来识别这个外部可执行文件是否已经安装在用户计算机上(检查方法尚未定义)。

如何为自定义操作设置这种检查?我看到在 Custom Actions window 中单击 .EXE 时有一个 Condition 属性,但我能找到的关于这个 属性 的是that,这并没有真正解决我的问题。

VS 安装程序提供注册表搜索,该搜索将设置您定义的 属性 名称(大写)。如果注册表项存在,这意味着您不需要 运行 程序,那么您可以为自定义操作提供 NOT FOUNDREGISTRY 条件,假设 FOUNDREGISTRY 是 属性 的名称。

话虽如此,如果该程序是一个可再分发的程序,那么:

  1. 他们通常足够聪明,可以判断是否需要做任何事情,包括查看已安装的是否是旧版本,所以无论如何他们应该 运行 因为这是一个较新的版本。所以最好只是运行它无论如何。

  2. 如果可执行文件包含基于 MSI 的安装程序,那么它将失败,因为您无法在 VS MSI 安装程序中使用自定义操作安装基于 MSI 的安装程序。