我有一个以登录用户(本地管理员)身份运行的 Windows 服务。在启动期间,我收到一条消息:“无法生成临时类(结果 = 1)”。所以,我去了 windows/temp 文件夹,UAC 提示我提升我的权限——在我这样做之后,服务会正常启动。那么,我该如何从 Windows 服务的角度来处理这个 UAC 提示呢?
谢谢!
我有一个以登录用户(本地管理员)身份运行的 Windows 服务。在启动期间,我收到一条消息:“无法生成临时类(结果 = 1)”。所以,我去了 windows/temp 文件夹,UAC 提示我提升我的权限——在我这样做之后,服务会正常启动。那么,我该如何从 Windows 服务的角度来处理这个 UAC 提示呢?
谢谢!
关于最初的问题 - 除了解决您的症状的事件顺序的具体问题。
当属于本地管理员组成员的用户登录到 UAC 下的计算机时,将授予两个安全令牌 - 一个具有有限权限,一个具有更高权限集。默认情况下,使用较低的权限 - 除非主动指定了较高的权限。指定的主要方式是通过 UI - 正如您所做的那样。另一种方法是使用应用程序清单:指定操作系统如何处理此应用程序的 XML 文件。清单文件应与可执行文件放在同一文件夹中,并使用以下格式命名:“my_application_name.exe.manifest”
清单中的 XML 如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MY_APPLICATION_NAME" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
我相信你可以通过谷歌搜索“UAC Manifest”找到更多具体信息......
希望这是有用的...
即使我仍然不知道如何回答我的问题,我也解决了我的问题。基本上,我的服务从引导过程继承了临时目录,所以我将其更改为使用当前用户的临时目录。您将需要按照以下方式做一些事情:
myProcess.StartInfo.EnvironmentVariables.Add("TempPath", "C:\Temp")
为什么不让 Windows 服务作为 LocalSystem 运行?