【问题标题】:MSI installer creates unattended shell open keyMSI 安装程序创建无人值守的外壳打开密钥
【发布时间】:2017-01-10 13:13:57
【问题描述】:

我在 VS2015 中创建了一个 MSI 安装程序项目,设置了所有内容,然后使用“文件类型编辑器”添加了一个文件扩展名关联,将我的扩展名分配给我的应用程序,作为打开命令。

COMMAND 是“应用程序文件夹”中的应用程序,设置了 EXTENSION,然后将 &OPEN 设置为 NAME=&Open, Arguments="%1" VERB=open。没有其他的。

我生成了 .msi 文件,然后启动。在安装结束时,我发现在注册表 Computer\HKEY_CLASSES_ROOT\\shell\open\command 键中有两项,一项是(默认)REG_SZ,其值为“myexe”“%1”,正如我所料

不幸的是,还有另一个项目:“command”、“REG_MULTI_SZ”,而且数据很奇怪,例如“LZ*a!t4(v=++Tt$)tOk_>[1jfrS!,nB`L6ciHLW!, "%1"" 我不知道它是什么。当我删除 .msi 文件并双击具有我注册扩展名的文件时,弹出对话框显示为“找不到网络资源”,Windows 想要我的 .msi 安装程序(浏览对话框出现)!我不知道如何防止这种不必要的情况。 :( 任何帮助将不胜感激!

【问题讨论】:

  • 可能是因为必须为每个用户设置文件关联?
  • 您的标题中的意思是“意外”而不是“无人参与”吗?
  • 你的英语完全可以理解,而且比我的匈牙利语好太多了。但是,我建议您编辑您的问题以更改标题,因为“无人值守”通常在安装上下文中表示“静音”或“非交互式”。 :)

标签: shell wix windows-installer file-extension


【解决方案1】:

Windows Installer 使用所谓的Darwin Descriptors 来实现弹性,其中可以自动修复损坏的安装。您尝试删除 .msi 而不是卸载它就像安装已损坏,因此系统会尝试修复它。但是,由于 .msi 本身已被删除,它必须寻求帮助。

这里的简短回答是建议您不要担心注册表项中的确切值。由于您使用的是扩展表而不是注册表表条目,因此注册表是一个实现细节;你应该宁愿忽略这些细节。相反,如果在成功安装后您的程序在双击相关文件时按预期启动,并且在正确卸载您的应用程序后停止这样做,那么一切都很好。

【讨论】:

  • 是的,我的问题是错误的。困扰我的不是注册表项。用户说,当他安装我的应用程序(注册文件关联),然后删除 .msi,然后双击具有特定扩展名的文件 - 而不是启动我的应用程序,窗口显示错误对话框并尝试查找微星。 (用户的)问题是 - 为什么?为什么安装成功后仍然需要它?
  • @Zoltan:安装的产品损坏(安装后文件或注册表项已被删除)。因此它将修复,这就是答案中描述的功能。不要删除 MSI - 这些修复需要它。如果问题是意外修复,我建议提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多