运行需要服务管理员帐户的应用程序

时间:2010-12-29 07:22:59

标签: c windows-7 service uac

是否可以从服务(在windows7中)运行handle.exe(来自sysinternals)而无需关闭UAC?

该服务是一个自定义的c-app,需要找出哪个进程正在锁定它试图访问的文件,handle.exe似乎是一个解决它的好方法但是我不能让它与UAC一起工作打开。这个应用程序一直运行,因此我在运行时无法提供UAC提示,但如果它在启动时显示则很好。

Handle.exe在管理命令提示符下正常工作,但在尝试从正常提示符运行时失败。

我从CreateProcess()调用handle.exe并从管道获取输出。我想应该有办法解决这个问题,但我无法弄明白。设置从管理员帐户登录的服务似乎不起作用。

2 个答案:

答案 0 :(得分:1)

UAC不会影响服务(它只会影响交互式会话),因此应该可以使用。

但是,如果您不想将整个程序移动到服务中,那么有更好的方法可以执行此操作,除了主程序之外,不需要创建,安装和管理单独的服务进程。

  1. 如果您的程序需要管理员权限才能工作,并且这不是唯一需要它们的地方,那么您可以将您的程序(通过其嵌入式清单资源)标记为需要管理员权限。然后,它将在运行时触发一个UAC提示,并以完全管理权限运行,包括运行Handle.exe的能力。

  2. 另一方面,如果这是您的程序需要管理员权限的唯一地方,那么创建一个包装Handle.exe调用(或任何其他管理工作)的COM DLL可能是有意义的可以使用UAC从非提升的应用程序中提升对该功能的调用。然后,每次创建COM对象的(升级版本)时,都会触发UAC提示。您可以根据需要保持COM对象处于打开状态,并随时创建它,因此UAC提示出现的时间和频率仍然取决于您。

  3. 1& 2是UAC的标准用法,因此任何关于UAC的良好文档或教程都将详细描述如何进行。

答案 1 :(得分:1)

您可能希望查看Win32 API方法CreateProcessWithLogonW。 此处还有一个提升VBS脚本,您可以从中学习:http://technet.microsoft.com/en-us/magazine/2007.06.utilityspotlight.aspx