c# - 从 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 来输出输入等......但我不知道如何让我的过程恢复任何想法?
解决方案
我不是在找好地方。现在你使用我的方法发回的PROCESS_INFORMATION 在他们里面是一个进程ID,我可以用这个简单的代码返回
var res = ProcessHelper.RunAsDesktopUser(fileName, opt);
var process = Process.GetProcessById(res.dwProcessId);
我已经对其进行了测试,并且效果很好。
推荐阅读
- javascript - 我可以使用 JavaScript 的 fetch() 函数从 file.php 调用特定方法吗?
- angular - Angular10 - 等待第一行完成
- angular - 将 2 个 firebase 集合合并到一个数组中
- system-verilog - 在函数中放置工厂注册时出现空项错误
- cmake - 无法在调试构建配置中使用 assimp 库
- java - com.google.firebase.database.Query 无法转换为 com.google.firebase.database.DatabaseReference
- python - % 差异数据透视表 python
- google-cloud-firestore - 存储选择器中的选定值以在其他视图中使用 - SwiftUI
- c++ - 如何使用 QStyledItemDelegate 在 QTreeWidget 中拥有不同高度的 QTreeWidgetItems?
- html - 将文本保留在 div 中