对于我的应用程序,我使用CreateProcessWithTokenW https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createprocesswithtokenw创建一个进程这有助于我在桌面用户下运行进程,因为我的应用程序在“管理员用户”下运行
在我使用C#进程处理我的进程并获取输出之前...
使用CreateProcessWithTokenW创建流程后,如何获取该流程?他们是StartUPINFO中的一些IntPtr,我回来了,但是我没有找到如何使用它进行处理。
我的结构是
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct STARTUPINFO
{
public Int32 cb;
public string lpReserved;
public string lpDesktop;
public string lpTitle;
public Int32 dwX;
public Int32 dwY;
public Int32 dwXSize;
public Int32 dwYSize;
public Int32 dwXCountChars;
public Int32 dwYCountChars;
public Int32 dwFillAttribute;
public Int32 dwFlags;
public Int16 wShowWindow;
public Int16 cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
我有点理解我有一些Ptr可以输出输入等...但是我不知道如何使我的过程返回任何ideA?
我不是在看好地方。现在,您使用我的方法发回的PROCESS_INFORMATION在他们的内部是一个过程ID,我可以用这个简单的代码来获取
var res = ProcessHelper.RunAsDesktopUser(fileName, opt);
var process = Process.GetProcessById(res.dwProcessId);
我已经对其进行了测试,并且可以正常工作。