何时会发生ShellExecute失败?(Delphi)

3

我计划在使用Delphi 2007编写的应用程序的更新器中使用ShellExecute。我想知道ShellExecute在大多数安装有Windows的计算机上是否可行,或者它是否会因为某些用户权限之类的问题而容易失败。

2个回答

1

我相信shellExecute需要管理员权限。你没有提到操作系统。如果是Vista+,那么UAC就会发挥作用。请参见this explanation


2
你的想法是错误的。ShellExecute本身并不需要管理员权限。(想想看:在资源管理器中双击一个文档并不需要提升的权限,而在这种情况下被调用的正是ShellExecute。) - Rob Kennedy

0

来自 MSDN

备注

由于ShellExecute可以将执行委托给使用组件对象模型(COM)激活的Shell扩展(数据源、上下文菜单处理程序、动词实现),因此在调用ShellExecute之前应该初始化COM。一些Shell扩展需要COM单线程公寓(STA)类型。在这种情况下,COM应该按照以下方式进行初始化:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

正如Ken Lange所建议的那样,根据您想要执行的操作,您可能需要管理员权限。

2
即便如此,Sebastian打算使用的功能根本不需要COM。事实上,它也不需要ShellExecute。对于执行已知程序(例如更新程序),CreateProcess是更好的函数。 - Rob Kennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接