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

Process 在C#中启动非exe进程时是否可以使用模拟?,process,impersonation,Process,Impersonation,我需要能够以不同的用户身份运行流程,我已经找到了大量的资源和不同的方法来实现这一点。问题是,我需要运行一个非exe进程,例如带有html扩展名的路径,或者在我的情况下是“” 有一个已知的问题,即启动的进程不从其启动器继承模拟上下文,还有一个已知的问题,即在不同凭据下启动的进程需要是可执行文件(.exe) 但我如何以不同的用户身份启动.application文件(例如) (我尝试过各种组合,包括p/调用CreateProcessWithLoginW、在ProcessStartInfo中设置用户/密

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

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

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


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

启动非exe时,实际上只是shell查找exe以用于文件或URL。还有一个exe

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


例如,要打开.txt文件,请查看“HKEY_CLASSES_ROOT\.txt”。在这里,您将看到类型为“txtfile”。然后查找“HKEY\U CLASSES\U ROOT\txtfile\shell\open\command”,您将看到shell将使用什么exe文件,通常是“%SystemRoot%\system32\NOTEPAD.exe%1”。

谢谢,这让我更进一步,虽然每次尝试使用某些凭据启动进程时,我仍然会遇到一个可怕的0xc0000142错误,但这是另一个问题。