MSI 安装程序创建无人值守的 shell 打开密钥

MSI installer creates unattended shell open key

我在 VS2015 中创建了一个 MSI 安装程序项目,设置了所有内容,然后添加了一个与 "File Types Editor" 关联的文件扩展名,将我的扩展名分配给了我的应用程序,作为一个打开命令。

COMMAND 是来自 "application folder" 的应用程序,设置了 EXTENSION,然后将 &OPEN 设置为 NAME=&Open,Arguments="%1" VERB=open。没有其他的。

我生成了 .msi 文件,然后开始了。在安装结束时,我发现在注册表 Computer\HKEY_CLASSES_ROOT\\shell\open\command 项中有两项,一项是 (Default) REG_SZ with value "myexe" "% 1" 如我所料

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

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

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