首页 > 解决方案 > 从 CreateProcessWithTokenW 获取 C# 中的 Process 对象

问题描述

为了我的应用程序的需要,我使用 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 来输出输入等......但我不知道如何让我的过程恢复任何想法?

标签: c#windowsprocess

解决方案


我不是在找好地方。现在你使用我的方法发回的PROCESS_INFORMATION 在他们里面是一个进程ID,我可以用这个简单的代码返回

var res = ProcessHelper.RunAsDesktopUser(fileName, opt);
var process = Process.GetProcessById(res.dwProcessId);

我已经对其进行了测试,并且效果很好。


推荐阅读