在 C# 中启动非 exe 进程时可以使用模拟吗?

发布于 2024-08-20 16:34:56 字数 450 浏览 7 评论 0原文

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

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

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

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

I need to be able to run a process as a different user, and I've found plenty of resources and different methods to do this. The problem is, I need to run a non-exe process, e.g. a path with html extension, or in my case, "http://somewebserver/someApp.application".

There's a known problem in which launched processes don't inherit impersonation contexts from their launcher, and there's also a known problem in which processes launched under different credentials need to be executable files (.exe).

But how would I launch a .application file (for example) as a different user?

(I've tried all sorts of combinations of p/invoking CreateProcessWithLoginW, setting user/password credentials in ProcessStartInfo, etc. Each face the same limitations mentioned above.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷月断魂刀 2024-08-27 16:34:56

启动非 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”。

When launching a non-exe, it's actually just the shell looking up the exe to use for the file or URL. There's still an exe involved.

Since the shell is already running, it's not going to inherit your impersonation. You could look up the exe yourself in the registry and then call CreateProcessWithLoginW, essentially simulating what the shell is doing for you.

For example, to open a .txt file, look in "HKEY_CLASSES_ROOT\.txt". There you'll see the type is "txtfile." Then look up "HKEY_CLASSES_ROOT\txtfile\shell\open\command" and you'll see what exe file the shell will use, which is (normally) "%SystemRoot%\system32\NOTEPAD.EXE %1".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文