【问题标题】:Possible to use Impersonation when launching a non-exe process in C#?在 C# 中启动非 exe 进程时可以使用模拟吗?
【发布时间】:2011-01-14 14:35:23
【问题描述】:

我需要能够以不同的用户身份运行进程,并且我找到了大量资源和不同的方法来执行此操作。问题是,我需要运行一个非 exe 进程,例如带有 html 扩展名的路径,或者在我的例子中是“http://somewebserver/someApp.application”。

存在一个已知问题,即启动的进程不会从其启动器继承模拟上下文,还有一个已知问题是在不同凭据下启动的进程需要是可执行文件 (.exe)。

但我如何以不同的用户身份启动 .application 文件(例如)?

(我尝试了各种 p/调用 CreateProcessWithLoginW、在 ProcessStartInfo 中设置用户/密码凭据等的组合。每种组合都面临上述相同的限制。)

【问题讨论】:

    标签: process impersonation


    【解决方案1】:

    在启动非 exe 时,实际上只是 shell 查找要用于文件或 URL 的 exe。仍然涉及一个exe。

    由于 shell 已经在运行,它不会继承您的模拟。您可以自己在注册表中查找 exe,然后调用 CreateProcessWithLoginW,本质上是模拟 shell 为您执行的操作。

    例如,要打开 .txt 文件,请查看“HKEY_CLASSES_ROOT\.txt”。在那里你会看到类型是“txtfile”。然后查找“HKEY_CLASSES_ROOT\txtfile\shell\open\command”,你会看到shell会使用什么exe文件,通常是“%SystemRoot%\system32\NOTEPAD.EXE %1”。

    【讨论】:

    • 谢谢,这让我更进一步,尽管每次我尝试使用某些凭据启动进程时,我仍然会遇到可怕的 0xc0000142 错误,但这是一个不同的问题。
    猜你喜欢
    • 2012-04-14
    • 2017-10-21
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多