在C#中启动非exe进程时是否可以使用模拟用户身份?

9
我需要能够以不同的用户身份运行进程,我已经找到了很多资源和不同的方法来实现这一点。问题是,我需要运行一个非exe进程,例如具有html扩展名的路径,或者在我的情况下,"http://somewebserver/someApp.application"。
已知存在一个问题,启动的进程不会从其启动器继承模拟上下文,还存在一个已知问题,使用不同凭据启动的进程需要是可执行文件(.exe)。
但是,我如何以不同的用户身份启动.application文件(例如)?
(我尝试过各种组合的p/invoking CreateProcessWithLoginW,在ProcessStartInfo中设置用户/密码凭据等。每个都面临上述相同的限制。)
1个回答

3

当启动一个非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错误,但那是另一个问题。 - vargonian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接