溫馨提示×

C#中CreateProcessAsUser服務調用的方法是什么

c#
小億
157
2023-09-15 14:14:49
欄目: 編程語言

在C#中,可以使用Advapi32.CreateProcessAsUser方法來調用CreateProcessAsUser服務。

以下是使用Advapi32.CreateProcessAsUser方法調用CreateProcessAsUser服務的示例代碼:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
class Program
{
static void Main(string[] args)
{
// 獲取當前用戶的訪問令牌
IntPtr currentUserToken = WindowsIdentity.GetCurrent().Token;
// 創建進程信息結構體
ProcessInformation processInfo = new ProcessInformation();
// 填充啟動信息結構體
StartupInfo startupInfo = new StartupInfo();
startupInfo.cb = Marshal.SizeOf(startupInfo);
// 調用CreateProcessAsUser方法創建進程
bool success = Advapi32.CreateProcessAsUser(
currentUserToken,   // 當前用戶的訪問令牌
"C:\\Path\\To\\Program.exe",   // 要啟動的程序的路徑
null,   // 命令行參數
IntPtr.Zero,   // 進程安全屬性
IntPtr.Zero,   // 線程安全屬性
false,   // 是否繼承句柄
0,   // 創建標志
IntPtr.Zero,   // 環境變量
null,   // 當前目錄
ref startupInfo,   // 啟動信息結構體
out processInfo   // 進程信息結構體
);
// 檢查進程創建是否成功
if (success)
{
Console.WriteLine("進程創建成功");
}
else
{
Console.WriteLine("進程創建失敗,錯誤碼:" + Marshal.GetLastWin32Error());
}
}
}
// 定義啟動信息結構體
[StructLayout(LayoutKind.Sequential)]
public struct StartupInfo
{
public int cb;
public string lpReserved;
public string lpDesktop;
public string lpTitle;
public int dwX;
public int dwY;
public int dwXSize;
public int dwYSize;
public int dwXCountChars;
public int dwYCountChars;
public int dwFillAttribute;
public int dwFlags;
public short wShowWindow;
public short cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
// 定義進程信息結構體
[StructLayout(LayoutKind.Sequential)]
public struct ProcessInformation
{
public IntPtr hProcess;
public IntPtr hThread;
public int dwProcessId;
public int dwThreadId;
}
// 定義Advapi32類用來訪問Advapi32.dll中的方法
public class Advapi32
{
// 導入Advapi32.dll中的CreateProcessAsUser方法
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool CreateProcessAsUser(
IntPtr hToken,
string lpApplicationName,
string lpCommandLine,
IntPtr lpProcessAttributes,
IntPtr lpThreadAttributes,
bool bInheritHandles,
int dwCreationFlags,
IntPtr lpEnvironment,
string lpCurrentDirectory,
ref StartupInfo lpStartupInfo,
out ProcessInformation lpProcessInformation
);
}

請注意,為了成功調用CreateProcessAsUser服務,你需要擁有適當的權限。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女