小编Tru*_*ueD的帖子

对于某些版本的 Windows,Windows 服务无法在用户使用 WTSQueryUserToken 登录时启动交互进程

按照此链接,我在我的 C# 解决方案中实现了WTSQueryUserTokenCreateProcessAsUserWrapper.LaunchChildProcess("app_path")OnStart我的 Windows 服务中调用了该方法,该方法作为“LocalSystem”运行。它能够启动可以与桌面交互的进程,但适用于 Windows Professional 而不适用于 Windows Ultimate。我在 Windows Professional 64 位上尝试过,它能够以交互方式在用户登录时成功启动进程,但在 Windows Ultimate 64 位版本上,该CreateProcessAsUser方法返回 false并且可以看到服务正在运行,SCM而进程则没有。

我的进程是一个 win 表单应用程序,它需要使用当前登录的用户帐户运行以进行桌面交互,并使用InteropServices. 会不会是框架问题?如何解决问题?请帮忙。

编辑: 两台机器都运行 Windows 7 64 位。我下面的代码添加后,出现错误代码CreateProcessAsUser,并返回“请求的操作需要提升”的错误。

string errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
Run Code Online (Sandbox Code Playgroud)

它仅发生在 Windows 7 Ultimate 中,而不发生在 Windows 7 Professional 中。我需要为每个登录的用户运行我的进程,这就是为什么我认为我不能使用该CreateProcessWithLogonW方法。我现在如何解决这个提升权限问题?

编辑: 有 2 个app.manifest文件,一个在服务项目中,另一个在 win 表单(流程)项目中。我删除这两个文件,建立了msiWiX和再测试。现在它在每台机器上成功运行,每个登录的用户帐户都会启动该进程。但是,现在造成了一个问题。其实我需要在windows/system文件夹下写一些日志,我现在做不到。我正进入(状态 ”UnauthorizedAccessException" …

c# windows windows-services interopservices

5
推荐指数
1
解决办法
3634
查看次数

标签 统计

c# ×1

interopservices ×1

windows ×1

windows-services ×1