【发布时间】:2017-02-02 08:52:49
【问题描述】:
这是我第一次创建 Windows 服务,我正在尝试为当前登录用户打开一个可执行文件,而该服务作为本地运行服务, 或 本地系统, 但我遇到的是 Executable 以 SYSTEM 用户身份运行,但没有显示给User 我的意思是进程在 SYSTEM 用户下Running 没有为 显示 Window >登录用户。
如果我的 Windows 服务作为 本地服务 运行,那么 可执行文件 似乎无法运行。任务管理器中没有生命迹象。
我已尝试查找我的问题并尝试了以下解决方案:
- Process.Start("FileName");
- File.Open("FileName", FileMode.Open);什么都没做! (任务管理器中没有生命迹象)
- ProcessStartInfo("FileName") with Verb = "run as";没有改变任何东西(以 SYSTEM 身份运行)
- 从命令提示符尝试了 shell 命令:Process.Start("run as (Forgot the entire command line I type)");什么都没做! (任务管理器中没有生命迹象)
- ProcessStartInfo("FileName") with Username = "User" without Password;什么都没做! (任务管理器中没有生命迹象)
我确实认为解决方案 4 和 5 不起作用,因为需要 密码,但根据 Microsoft Post 关于 Local System 的信息说 SYSTEM 不需要 Password 来访问 User(Impersonation),但我不明白什么Impersonation 确实是,它似乎与 Win API Natives 有什么关系。
我认为可执行文件窗口实际上是在Executable运行时显示给SYSTEM的。不是当前登录的用户。
现在:
- 如果没有 WinAPI Natives,我的问题是否有解决方案?
- 如果需要本地人,您能否也尝试向我解释一下?发布代码时?我只了解 WinAPI 的 Handles,这就是我真正了解的全部。
- 这可以在 本地系统 运行服务上实现吗?因为我的服务专注于做系统管理?而不是本地服务。
- 是否可以在 C# 编程语言中完成所有这些操作?
PS:我正在进行的项目是我公司的系统管理工具包。对于未来的项目。
PS2:如果您需要更多信息,请告诉我,我会经常查看此帖子。
PS3:如果您发现任何语法错误,请原谅我的英语。
【问题讨论】:
-
PS4:我的操作系统是 Windows 10
-
StartInfo 和 File.Open() 不会启动进程,也许在谷歌上搜索一下会有所帮助。
-
我确实做了很多谷歌搜索,但我还找不到解决问题的方法,而且我知道 StartInfo 应该在 Process.Start 中。如果我能找到解决问题的方法,我会尽快发布。
-
请更详细地描述您真正想要实现的目标。您要启动应用程序吗?是否要打开应用程序映射到文件类型的文件?我不清楚你的目标是什么。