我有一个带有安装/安装程序项目的Visual Studio 2013 Windows窗体解决方案(VB.NET 4.5和Windows Installer 4.5)。
我让安装程序添加了一个Start Program文件夹和项目,即"开始/所有程序/我的公司/应用程序名称"。
除了上下文菜单没有显示我期望看到的几个项目之外,安装程序的工作方式与广告一样。
这是"正常"程序项目上下文菜单(对于Skype,比如说)在左边,而我的应用程序在右边:
请注意缺少"以管理员身份运行","打开文件位置","固定到开始菜单"等
我进一步观察,如果我比较每个节目菜单项的属性,我看到Skype的目标是明确的" .exe"虽然我自己的目标是整个计划组(左边是Skype,右边是我的应用程序):
另请注意,我无法编辑目标。
现在,如果我手动添加我的应用程序" .exe"对于程序组,属性和上下文菜单显示与Skype相同:
然后我检查了安装程序项目的文件系统设置中的Windows Installer快捷方式设置。据我所知,它只允许我创建解决方案主要输出的快捷方式,而且我无法明确地快捷键入KeyOutput" .exe"。
任何人都可以对此有所了解吗?我错过了一些明显的东西吗?
更新:为了澄清我需要的内容,我希望安装程序根据Skype示例创建一个程序菜单项快捷方式,其中包含所有相同的上下文菜单选项。
更新:在使用Orca进行Stein建议的MSI更改后,验证失败并出现一些错误:
ICE43 ERROR Component 'C__667B7EAE74690565610625BA20DE4CEE' has non-advertised shortcuts. It should use a registry key under HKCU as its KeyPath, not a file.
ICE57 ERROR Component 'C__667B7EAE74690565610625BA20DE4CEE' has both per-user and per-machine data with a per-machine KeyPath.
(还有一个与手动更改无关的警告:
ICE90 WARNING The shortcut '_2B5AE78F623048DC8EDAB2174FC1AB82' has a directory that is a public property (ALL CAPS) and is under user profile directory. This results in a problem if the value of the ALLUSERS property changes in the UI sequence.
这可以通过进一步手动更改密钥来解决,例如包括小写,例如_2b5AE78 ...)
不幸的是,我发现在经常使用修改后的MSI时,程序组根本没有实际创建。最初,它似乎工作,但此后,不是。所以我已经恢复了未经修改的MSI,只是搞了上下文问题,因为它真的不值得痛苦。
答案 0 :(得分:3)
您所描述的是广告的快捷方式与标准快捷方式(a lot of info on MSI shortcuts)。广告的快捷方式是Windows Installer功能 - 它们在实际上指向产品功能(MSI包中的功能)的意义上是唯一的,而不是直接指向文件。因此,我认为它们的设置是为了处理快捷方式文件(*.lnk files
)而设置不同。
从广义上讲:广告快捷方式是MSI“按需安装”功能的核心,并且还会在调用时触发MSI密钥路径检查(安装完整性检查) - 这可以触发自我如果未正确安装相关产品,请进行维修。
*.lnk files
的shell处理定义在:HKEY_CLASSES_ROOT\.lnk\
按住 SHIFT ,然后右键单击广告的快捷方式会带来更多选项 - 例如run as administrator
。我认为shell本身(%SystemRoot%\system32\shell32.dll
)处理*.lnk files
。
我们无法从您提供的说明中真正说明您的需求。也许您只需要run as administrator
选项?也许不是,但如果你这样做,我想有几个选择:
只需使用常规快捷方式(将 WiX项目中Shortcut element的广告属性设置为“否“)。这应该会在安装后为快捷方式显示“正常”上下文菜单。
依靠上面描述的 SHIFT + 右键单击鼠标,在需要时显示run as administrator
- 如果这就是您所追求的。
如果您始终需要管理员权限,我想您可以通过应用程序清单要求管理员权限?通常这些天非常不满意,但可能:How do I force my .NET application to run as administrator?
要对已编译的MSI进行后处理以禁用播发的快捷方式: