做网站php与python商城网站建设目标
news/
2025/9/22 15:42:02/
文章来源:
做网站php与python,商城网站建设目标,营销型网站建设题,效果图哪里可以制作我们使用传统的Process.Start(.exe)启动进程会遇到无法打开UI界面的问题#xff0c;尤其是我们需要进行开启自启动程序设置时出现诸多问题#xff0c;于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序#xff0c;并且是显式运行。
首先是打开…我们使用传统的Process.Start(.exe)启动进程会遇到无法打开UI界面的问题尤其是我们需要进行开启自启动程序设置时出现诸多问题于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序并且是显式运行。
首先是打开Visual Studio创建一个windos服务程序 详细创建windos服务程序不过多赘述在另外一篇文章里有介绍【Visual Studio C#创建windows服务程序-CSDN博客】
我们在OnStart方法中写下我们启动程序的执行逻辑具体代码如下
using System;
using System.ServiceProcess;
using System.Threading.Tasks;
using System.Configuration;
using log4net;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Linq;namespace Web.Server.Api
{public partial class MyService : ServiceBase{public MyService(){logger LogManager.GetLogger(typeof(MyService));path D:\bin\Release\MCS.exe;InitializeComponent();}private readonly string path;private readonly ILog logger;/// summary/// 服务启动时执行的操作/// /summary/// param nameargs/paramprotected override void OnStart(string[] args){Task.Run(() {for (int i 0; i 20; i) //为了防止启动失败我们这里设置了一个循环默认程序执行20次{try{string processName Path.GetFileNameWithoutExtension(path); //获取应用程序名称var processes Process.GetProcesses(); //获取所有进程if (processes.Any(v v.ProcessName.Equals(processName, StringComparison.OrdinalIgnoreCase))){logger.Info($此程序已正常启动 {processName}\n路径:{path});break; //程序启动成功退出for循环}else{this.Start(path);}}catch (Exception err){logger.Error(err.Message, err);}finally{Thread.Sleep(1000);}}});}protected override void OnStop(){string processName Process.GetCurrentProcess().ProcessName;logger.Info($服务管理程序已退出 {processName});base.OnStop();}/// summary/// 启动方法1/// /summary/// param nameappStartPath/paramprivate void Start(string appStartPath){try{UserProcess.PROCESS_INFORMATION pInfo new UserProcess.PROCESS_INFORMATION();UserProcess.StartProcessAndBypassUAC(appStartPath, string.Empty, out pInfo);}catch (Exception err){logger.Error(err.Message, err);}}/// summary/// 启动方法2/// /summary/// param nameappStartPath/paramprivate void Start2(string appStartPath){try{IntPtr userTokenHandle IntPtr.Zero;ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle);ApiDefinitions.PROCESS_INFORMATION procInfo new ApiDefinitions.PROCESS_INFORMATION();ApiDefinitions.STARTUPINFO startInfo new ApiDefinitions.STARTUPINFO();startInfo.cb (uint)System.Runtime.InteropServices.Marshal.SizeOf(startInfo);ApiDefinitions.CreateProcessAsUser(userTokenHandle, appStartPath, string.Empty, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out procInfo);if (userTokenHandle ! IntPtr.Zero){ApiDefinitions.CloseHandle(userTokenHandle);}int _currentAquariusProcessId (int)procInfo.dwProcessId;}catch (Exception err){logger.Error(err.Message, err);}}}
}
上述代码中我们给出了两种启动方式两种启动方式的代码大同小异推荐第一种方法比较简洁。两种启动方式的具体代码如下
启动方法1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;namespace Web.Server.Api
{public class UserProcess{#region Structures[StructLayout(LayoutKind.Sequential)]public struct SECURITY_ATTRIBUTES{public int Length;public IntPtr lpSecurityDescriptor;public bool bInheritHandle;}[StructLayout(LayoutKind.Sequential)]public struct STARTUPINFO{public int cb;public String lpReserved;public String lpDesktop;public String lpTitle;public uint dwX;public uint dwY;public uint dwXSize;public uint dwYSize;public uint dwXCountChars;public uint dwYCountChars;public uint dwFillAttribute;public uint dwFlags;public short wShowWindow;public short cbReserved2;public IntPtr lpReserved2;public IntPtr hStdInput;public IntPtr hStdOutput;public IntPtr hStdError;}[StructLayout(LayoutKind.Sequential)]public struct PROCESS_INFORMATION{public IntPtr hProcess;public IntPtr hThread;public uint dwProcessId;public uint dwThreadId;}#endregion#region Enumerationsenum TOKEN_TYPE : int{TokenPrimary 1,TokenImpersonation 2}enum SECURITY_IMPERSONATION_LEVEL : int{SecurityAnonymous 0,SecurityIdentification 1,SecurityImpersonation 2,SecurityDelegation 3,}enum WTSInfoClass{InitialProgram,ApplicationName,WorkingDirectory,OEMId,SessionId,UserName,WinStationName,DomainName,ConnectState,ClientBuildNumber,ClientName,ClientDirectory,ClientProductId,ClientHardwareId,ClientAddress,ClientDisplay,ClientProtocolType}#endregion#region Constantspublic const int TOKEN_DUPLICATE 0x0002;public const uint MAXIMUM_ALLOWED 0x2000000;public const int CREATE_NEW_CONSOLE 0x00000010;public const int IDLE_PRIORITY_CLASS 0x40;public const int NORMAL_PRIORITY_CLASS 0x20;public const int HIGH_PRIORITY_CLASS 0x80;public const int REALTIME_PRIORITY_CLASS 0x100;#endregion#region Win32 API Imports[DllImport(kernel32.dll, SetLastError true)]private static extern bool CloseHandle(IntPtr hSnapshot);[DllImport(kernel32.dll)]static extern uint WTSGetActiveConsoleSessionId();[DllImport(wtsapi32.dll, CharSet CharSet.Unicode, SetLastError true), SuppressUnmanagedCodeSecurityAttribute]static extern bool WTSQuerySessionInformation(System.IntPtr hServer, int sessionId, WTSInfoClass wtsInfoClass, out System.IntPtr ppBuffer, out uint pBytesReturned);[DllImport(advapi32.dll, EntryPoint CreateProcessAsUser, SetLastError true, CharSet CharSet.Ansi, CallingConvention CallingConvention.StdCall)]public extern static bool CreateProcessAsUser(IntPtr hToken, String lpApplicationName, String lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes,ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandle, int dwCreationFlags, IntPtr lpEnvironment,String lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);[DllImport(kernel32.dll)]static extern bool ProcessIdToSessionId(uint dwProcessId, ref uint pSessionId);[DllImport(advapi32.dll, EntryPoint DuplicateTokenEx)]public extern static bool DuplicateTokenEx(IntPtr ExistingTokenHandle, uint dwDesiredAccess,ref SECURITY_ATTRIBUTES lpThreadAttributes, int TokenType,int ImpersonationLevel, ref IntPtr DuplicateTokenHandle);[DllImport(kernel32.dll)]static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);[DllImport(advapi32, SetLastError true), SuppressUnmanagedCodeSecurityAttribute]static extern bool OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);#endregionpublic static string GetCurrentActiveUser(){IntPtr hServer IntPtr.Zero, state IntPtr.Zero;uint bCount 0;// obtain the currently active session id; every logged on user in the system has a unique session id uint dwSessionId WTSGetActiveConsoleSessionId();string domain string.Empty, userName string.Empty;if (WTSQuerySessionInformation(hServer, (int)dwSessionId, WTSInfoClass.DomainName, out state, out bCount)){domain Marshal.PtrToStringAuto(state);}if (WTSQuerySessionInformation(hServer, (int)dwSessionId, WTSInfoClass.UserName, out state, out bCount)){userName Marshal.PtrToStringAuto(state);}return string.Format({0}\\{1}, domain, userName);}/// summary /// Launches the given application with full admin rights, and in addition bypasses the Vista UAC prompt /// /summary /// param nameapplicationNameThe name of the application to launch/param /// param nameprocInfoProcess information regarding the launched application that gets returned to the caller/param /// returns/returns public static bool StartProcessAndBypassUAC(String applicationName, String command, out PROCESS_INFORMATION procInfo){uint winlogonPid 0;IntPtr hUserTokenDup IntPtr.Zero, hPToken IntPtr.Zero, hProcess IntPtr.Zero;procInfo new PROCESS_INFORMATION();// obtain the currently active session id; every logged on user in the system has a unique session id uint dwSessionId WTSGetActiveConsoleSessionId();// obtain the process id of the winlogon process that is running within the currently active session System.Diagnostics.Process[] processes System.Diagnostics.Process.GetProcessesByName(winlogon);foreach (System.Diagnostics.Process p in processes){if ((uint)p.SessionId dwSessionId){winlogonPid (uint)p.Id;}}// obtain a handle to the winlogon process hProcess OpenProcess(MAXIMUM_ALLOWED, false, winlogonPid);// obtain a handle to the access token of the winlogon process if (!OpenProcessToken(hProcess, TOKEN_DUPLICATE, ref hPToken)){CloseHandle(hProcess);return false;}// Security attibute structure used in DuplicateTokenEx and CreateProcessAsUser // I would prefer to not have to use a security attribute variable and to just // simply pass null and inherit (by default) the security attributes // of the existing token. However, in C# structures are value types and therefore // cannot be assigned the null value. SECURITY_ATTRIBUTES sa new SECURITY_ATTRIBUTES();sa.Length Marshal.SizeOf(sa);// copy the access token of the winlogon process; the newly created token will be a primary token if (!DuplicateTokenEx(hPToken, MAXIMUM_ALLOWED, ref sa, (int)SECURITY_IMPERSONATION_LEVEL.SecurityIdentification, (int)TOKEN_TYPE.TokenPrimary, ref hUserTokenDup)){CloseHandle(hProcess);CloseHandle(hPToken);return false;}// By default CreateProcessAsUser creates a process on a non-interactive window station, meaning // the window station has a desktop that is invisible and the process is incapable of receiving // user input. To remedy this we set the lpDesktop parameter to indicate we want to enable user // interaction with the new process. STARTUPINFO si new STARTUPINFO();si.cb (int)Marshal.SizeOf(si);si.lpDesktop winsta0\default; // interactive window station parameter; basically this indicates that the process created can display a GUI on the desktop // flags that specify the priority and creation method of the process int dwCreationFlags NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;// create a new process in the current users logon session bool result CreateProcessAsUser(hUserTokenDup, // clients access token applicationName, // file to execute command, // command line ref sa, // pointer to process SECURITY_ATTRIBUTES ref sa, // pointer to thread SECURITY_ATTRIBUTES false, // handles are not inheritable dwCreationFlags, // creation flags IntPtr.Zero, // pointer to new environment block null, // name of current directory ref si, // pointer to STARTUPINFO structure out procInfo // receives information about new process );// invalidate the handles CloseHandle(hProcess);CloseHandle(hPToken);CloseHandle(hUserTokenDup);return result; // return the result }}
}启动方法2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace Web.Server.Api
{public class ApiDefinitions{public struct WTS_SESSION_INFO{public uint SessionId;[MarshalAs(UnmanagedType.LPTStr)]public string pWinStationName;public WTS_CONNECTSTATE_CLASS State;}public enum WTS_CONNECTSTATE_CLASS{WTSActive,WTSConnected,WTSConnectQuery,WTSShadow,WTSDisconnected,WTSIdle,WTSListen,WTSReset,WTSDown,WTSInit}public enum WTS_INFO_CLASS{WTSInitialProgram,WTSApplicationName,WTSWorkingDirectory,WTSOEMId,WTSSessionId,WTSUserName,WTSWinStationName,WTSDomainName,WTSConnectState,WTSClientBuildNumber,WTSClientName,WTSClientDirectory,WTSClientProductId,WTSClientHardwareId,WTSClientAddress,WTSClientDisplay,WTSClientProtocolType,WTSIdleTime,WTSLogonTime,WTSIncomingBytes,WTSOutgoingBytes,WTSIncomingFrames,WTSOutgoingFrames,WTSClientInfo,WTSSessionInfo,WTSSessionInfoEx,WTSConfigInfo,WTSValidationInfo,WTSSessionAddressV4,WTSIsRemoteSession}public class LOGON_RIGHT{public const string SE_BATCH_LOGON_NAME SeBatchLogonRight;public const string SE_SERVICE_LOGON_NAME SeServiceLogonRight;public const string SE_DENY_BATCH_LOGON_NAME SeDenyBatchLogonRight;public const string SE_DENY_INTERACTIVE_LOGON_NAME SeDenyInteractiveLogonRight;public const string SE_DENY_NETWORK_LOGON_NAME SeDenyNetworkLogonRight;public const string SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME SeDenyRemoteInteractiveLogonRight;public const string SE_DENY_SERVICE_LOGON_NAME SeDenyServiceLogonRight;public const string SE_INTERACTIVE_LOGON_NAME SeInteractiveLogonRight;public const string SE_NETWORK_LOGON_NAME SeNetworkLogonRight;public const string SE_REMOTE_INTERACTIVE_LOGON_NAME SeRemoteInteractiveLogonRight;}public enum LSA_POLICY_ACCESS_MASK : uint{POLICY_VIEW_LOCAL_INFORMATION 1u,POLICY_VIEW_AUDIT_INFORMATION 2u,POLICY_GET_PRIVATE_INFORMATION 4u,POLICY_TRUST_ADMIN 8u,POLICY_CREATE_ACCOUNT 0x10u,POLICY_CREATE_SECRET 0x20u,POLICY_CREATE_PRIVILEGE 0x40u,POLICY_SET_DEFAULT_QUOTA_LIMITS 0x80u,POLICY_SET_AUDIT_REQUIREMENTS 0x100u,POLICY_AUDIT_LOG_ADMIN 0x200u,POLICY_SERVER_ADMIN 0x400u,POLICY_LOOKUP_NAMES 0x800u,POLICY_NOTIFICATION 0x1000u}public enum SERVICE_STATES : uint{SERVICE_CONTINUE_PENDING 5u,SERVICE_PAUSE_PENDING 6u,SERVICE_PAUSED 7u,SERVICE_RUNNING 4u,SERVICE_START_PENDING 2u,SERVICE_STOP_PENDING 3u,SERVICE_STOPPED 1u}public enum SERVICE_CONTROL_CODES : uint{SERVICE_CONTROL_CONTINUE 3u,SERVICE_CONTROL_INTERROGATE 4u,SERVICE_CONTROL_NETBINDADD 7u,SERVICE_CONTROL_NETBINDDISABLE 10u,SERVICE_CONTROL_NETBINDENABLE 9u,SERVICE_CONTROL_NETBINDREMOVE 8u,SERVICE_CONTROL_PARAMCHANGE 6u,SERVICE_CONTROL_PAUSE 2u,SERVICE_CONTROL_STOP 1u}[StructLayout(LayoutKind.Sequential)]public class QUERY_SERVICE_CONFIG{public uint dwServiceType;public uint dwStartType;public uint dwErrorControl;[MarshalAs(UnmanagedType.LPWStr)]public string lpBinaryPathName;[MarshalAs(UnmanagedType.LPWStr)]public string lpLoadOrderGroup;public uint dwTagId;public IntPtr lpDependencies;[MarshalAs(UnmanagedType.LPWStr)]public string lpServiceStartName;[MarshalAs(UnmanagedType.LPWStr)]public string lpDisplayName;}[StructLayout(LayoutKind.Sequential, CharSet CharSet.Unicode)]public struct SHARE_INFO_1{[MarshalAs(UnmanagedType.LPWStr)]public string shi1_netname;public ShareType shi1_type;[MarshalAs(UnmanagedType.LPWStr)]public string shi1_remark;}public enum ShareType{STYPE_DISKTREE 0,STYPE_PRINTQ 1,STYPE_DEVICE 2,STYPE_IPC 3,STYPE_TEMPORARY 0x40000000,STYPE_SPECIAL int.MinValue}[Flags]public enum DsGetDcNameFlags{DS_FORCE_REDISCOVERY 0x1,DS_DIRECTORY_SERVICE_REQUIRED 0x10,DS_DIRECTORY_SERVICE_PREFERRED 0x20,DS_GC_SERVER_REQUIRED 0x40,DS_PDC_REQUIRED 0x80,DS_BACKGROUND_ONLY 0x100,DS_IP_REQUIRED 0x200,DS_KDC_REQUIRED 0x400,DS_TIMESERV_REQUIRED 0x800,DS_WRITABLE_REQUIRED 0x1000,DS_GOOD_TIMESERV_PREFERRED 0x2000,DS_AVOID_SELF 0x4000,DS_ONLY_LDAP_NEEDED 0x8000,DS_IS_FLAT_NAME 0x10000,DS_IS_DNS_NAME 0x20000,DS_TRY_NEXTCLOSEST_SITE 0x40000,DS_DIRECTORY_SERVICE_6_REQUIRED 0x80000,DS_WEB_SERVICE_REQUIRED 0x100000,DS_RETURN_DNS_NAME 0x40000000,DS_RETURN_FLAT_NAME int.MinValue}public enum SID_NAME_USE{SidTypeUser 1,SidTypeGroup,SidTypeDomain,SidTypeAlias,SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,SidTypeUnknown,SidTypeComputer,SidTypeLabel}public struct STARTUPINFO{public uint cb;[MarshalAs(UnmanagedType.LPWStr)]public string lpReserved;[MarshalAs(UnmanagedType.LPWStr)]public string lpDesktop;[MarshalAs(UnmanagedType.LPWStr)]public string lpTitle;public uint dwX;public uint dwY;public uint dwXSize;public uint dwYSize;public uint dwXCountChars;public uint dwYCountChars;public uint dwFillAttribute;public uint dwFlags;public ushort wShowWindow;public ushort cbReserved2;public IntPtr lpReserved2;public IntPtr hStdInput;public IntPtr hStdOutput;public IntPtr hStdError;}public struct PROCESS_INFORMATION{public IntPtr hProcess;public IntPtr hThread;public uint dwProcessId;public uint dwThreadId;}public struct IP_INTERFACE_INFO{public int NumAdapters;public IP_ADAPTER_INDEX_MAP[] Adapter;}[StructLayout(LayoutKind.Sequential, CharSet CharSet.Unicode)]public struct IP_ADAPTER_INDEX_MAP{public int Index;[MarshalAs(UnmanagedType.ByValTStr, SizeConst 128)]public string Name;}public enum NET_API_STATUS{NERR_SUCCESS 0,ERROR_ACCESS_DENIED 5,PATH_NOT_FOUND 53,ERROR_INVALID_PARAMETER 87,ERROR_INVALID_NAME 123,ERROR_INVALID_LEVEL 124,ERROR_MORE_DATA 234,ERROR_NO_SUCH_DOMAIN 1355,NERR_UNKNOWNDEVDIR 2116,NERR_REDIRECTEDPATH 2117,NERR_DUPLICATESHARE 2118,NERR_BUFTOOSMALL 2123,NERR_ACCT_EXISTS 2224,NERR_SETUPNOTJOINED 2692}public struct SHARE_INFO_502{[MarshalAs(UnmanagedType.LPWStr)]public string shi502_netname;public uint shi502_type;[MarshalAs(UnmanagedType.LPWStr)]public string shi502_remark;public int shi502_permissions;public int shi502_max_uses;public int shi502_current_uses;[MarshalAs(UnmanagedType.LPWStr)]public string shi502_path;[MarshalAs(UnmanagedType.LPWStr)]public string shi502_passwd;public int shi502_reserved;public IntPtr shi502_security_descriptor;}public struct SECURITY_DESCRIPTOR{public byte Revision;public byte Sbz1;public ushort Control;public IntPtr Owner;public IntPtr Group;public IntPtr Sacl;public IntPtr Dacl;}public enum ACCESS_MASK : uint{DELETE 0x10000u,READ_CONTROL 0x20000u,WRITE_DAC 0x40000u,WRITE_OWNER 0x80000u,SYNCHRONIZE 0x100000u,STANDARD_RIGHTS_REQUIRED 983040u,STANDARD_RIGHTS_READ 0x20000u,GENERIC_ALL 0x10000000u,GENERIC_READ 0x80000000u,GENERIC_WRITE 0x40000000u,GENERIC_EXECUTE 0x20000000u,CHANGE 1245631u}public enum ACCESS_MODE : uint{NOT_USED_ACCESS,GRANT_ACCESS,SET_ACCESS,DENY_ACCESS,REVOKE_ACCESS,SET_AUDIT_SUCCESS,SET_AUDIT_FAILURE}public enum MULTIPLE_TRUSTEE_OPERATION : uint{NO_MULTIPLE_TRUSTEE,TRUSTEE_IS_IMPERSONATE}public enum TRUSTEE_FORM : uint{TRUSTEE_IS_SID,TRUSTEE_IS_NAME,TRUSTEE_BAD_FORM,TRUSTEE_IS_OBJECTS_AND_SID,TRUSTEE_IS_OBJECTS_AND_NAME}public enum TRUSTEE_TYPE : uint{TRUSTEE_IS_UNKNOWN,TRUSTEE_IS_USER,TRUSTEE_IS_GROUP,TRUSTEE_IS_DOMAIN,TRUSTEE_IS_ALIAS,TRUSTEE_IS_WELL_KNOWN_GROUP,TRUSTEE_IS_DELETED,TRUSTEE_IS_INVALID,TRUSTEE_IS_COMPUTER}public enum SYSTEM_POWER_STATE{PowerSystemUnspecified,PowerSystemWorking,PowerSystemSleeping1,PowerSystemSleeping2,PowerSystemSleeping3,PowerSystemHibernate,PowerSystemShutdown,PowerSystemMaximum}public enum POWER_ACTION{PowerActionNone,PowerActionReserved,PowerActionSleep,PowerActionHibernate,PowerActionShutdown,PowerActionShutdownReset,PowerActionShutdownOff,PowerActionWarmEject}public struct EXPLICIT_ACCESS{public uint grfAccessPermissions;public ACCESS_MODE grfAccessMode;public uint grfInheritance;public TRUSTEE Trustee;}public struct TRUSTEE{public uint pMultipleTrustee;public MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;public TRUSTEE_FORM TrusteeForm;public TRUSTEE_TYPE TrusteeType;[MarshalAs(UnmanagedType.LPTStr)]public string ptstrName;}public struct SHARE_INFO_2{[MarshalAs(UnmanagedType.LPWStr)]public string shi2_netname;public uint shi2_type;[MarshalAs(UnmanagedType.LPWStr)]public string shi2_remark;public uint shi2_permissions;public int shi2_max_uses;public uint shi2_current_uses;[MarshalAs(UnmanagedType.LPWStr)]public string shi2_path;[MarshalAs(UnmanagedType.LPWStr)]public string shi2_passwd;}public struct SP_DEVINFO_DATA{public uint cbSize;public Guid ClassGuid;public uint DevInst;public IntPtr Reserved;}[StructLayout(LayoutKind.Sequential, Pack 1)]public struct Process_Basic_Information{public IntPtr ExitStatus;public IntPtr PebBaseAddress;public IntPtr AffinityMask;public IntPtr BasePriority;public IntPtr UniqueProcessID;public IntPtr InheritedFromUniqueProcessId;}public struct HIGHCONTRAST{public uint cbSize;public uint dwFlags;[MarshalAs(UnmanagedType.LPWStr)]public string lpszDefaultScheme;}public struct NETRESOURCE{public uint dwScope;public uint dwType;public uint dwDisplayType;public uint dwUsage;[MarshalAs(UnmanagedType.LPWStr)]public string lpLocalName;[MarshalAs(UnmanagedType.LPWStr)]public string lpRemoteName;[MarshalAs(UnmanagedType.LPWStr)]public string lpComment;[MarshalAs(UnmanagedType.LPWStr)]public string lpProvider;}public struct ENUM_SERVICE_STATUS_PROCESS{[MarshalAs(UnmanagedType.LPTStr)]public string lpServiceName;[MarshalAs(UnmanagedType.LPTStr)]public string lpDisplayName;public SERVICE_STATUS_PROCESS ServiceStatusProcess;}public struct SERVICE_STATUS_PROCESS{public uint dwServiceType;public SERVICE_STATES dwCurrentState;public uint dwControlsAccepted;public uint dwWin32ExitCode;public uint dwServiceSpecificExitCode;public uint dwCheckPoint;public uint dwWaitHint;public uint dwProcessId;public uint dwServiceFlags;}public struct FLASHWINFO{public uint cbSize;public IntPtr hwnd;public uint dwFlags;public uint uCount;public uint dwTimeout;}public struct POWER_POLICY{public USER_POWER_POLICY user;public MACHINE_POWER_POLICY mach;}public struct MACHINE_POWER_POLICY{public uint Revision;public SYSTEM_POWER_STATE MinSleepAc;public SYSTEM_POWER_STATE MinSleepDc;public SYSTEM_POWER_STATE ReducedLatencySleepAc;public SYSTEM_POWER_STATE ReducedLatencySleepDc;public uint DozeTimeoutAc;public uint DozeTimeoutDc;public uint DozeS4TimeoutAc;public uint DozeS4TimeoutDc;public byte MinThrottleAc;public byte MinThrottleDc;[MarshalAs(UnmanagedType.ByValTStr, SizeConst 2)]public string pad1;public POWER_ACTION_POLICY OverThrottledAc;public POWER_ACTION_POLICY OverThrottledDc;}public struct USER_POWER_POLICY{public uint Revision;public POWER_ACTION_POLICY IdleAc;public POWER_ACTION_POLICY IdleDc;public uint IdleTimeoutAc;public uint IdleTimeoutDc;public byte IdleSensitivityAc;public byte IdleSensitivityDc;public byte ThrottlePolicyAc;public byte ThrottlePolicyDc;public SYSTEM_POWER_STATE MaxSleepAc;public SYSTEM_POWER_STATE MaxSleepDc;[MarshalAs(UnmanagedType.ByValArray, SizeConst 2, ArraySubType UnmanagedType.U4)]public uint[] Reserved;public uint VideoTimeoutAc;public uint VideoTimeoutDc;public uint SpindownTimeoutAc;public uint SpindownTimeoutDc;public byte OptimizeForPowerAc;public byte OptimizeForPowerDc;public byte FanThrottleToleranceAc;public byte FanThrottleToleranceDc;public byte ForcedThrottleAc;public byte ForcedThrottleDc;}public struct POWER_ACTION_POLICY{public POWER_ACTION Action;public uint Flags;public uint EventCode;}public struct GLOBAL_POWER_POLICY{public GLOBAL_USER_POWER_POLICY user;public GLOBAL_MACHINE_POWER_POLICY mach;}public struct GLOBAL_USER_POWER_POLICY{public uint Revision;public POWER_ACTION_POLICY PowerButtonAc;public POWER_ACTION_POLICY PowerButtonDc;public POWER_ACTION_POLICY SleepButtonAc;public POWER_ACTION_POLICY SleepButtonDc;public POWER_ACTION_POLICY LidCloseAc;public POWER_ACTION_POLICY LidCloseDc;[MarshalAs(UnmanagedType.ByValArray, SizeConst 4, ArraySubType UnmanagedType.Struct)]public SYSTEM_POWER_LEVEL[] DischargePolicy;public uint GlobalFlags;}public struct GLOBAL_MACHINE_POWER_POLICY{public uint Revision;public SYSTEM_POWER_STATE LidOpenWakeAc;public SYSTEM_POWER_STATE LidOpenWakeDc;public uint BroadcastCapacityResolution;}public struct SYSTEM_POWER_LEVEL{public byte Enable;[MarshalAs(UnmanagedType.ByValArray, SizeConst 3, ArraySubType UnmanagedType.I1)]public byte[] Spare;public uint BatteryLevel;public POWER_ACTION_POLICY PowerPolicy;public SYSTEM_POWER_STATE MinSystemState;}[StructLayout(LayoutKind.Sequential, Pack 4)]public struct SHQUERYRBINFO{public uint cbSize;public ulong i64Size;public ulong i64NumItems;}public struct RECT{public int left;public int top;public int right;public int bottom;}public enum COMPUTER_NAME_FORMAT{ComputerNameNetBIOS,ComputerNameDnsHostname,ComputerNameDnsDomain,ComputerNameDnsFullyQualified,ComputerNamePhysicalNetBIOS,ComputerNamePhysicalDnsHostname,ComputerNamePhysicalDnsDomain,ComputerNamePhysicalDnsFullyQualified,ComputerNameMax}public struct LSA_UNICODE_STRING{public ushort Length;public ushort MaximumLength;[MarshalAs(UnmanagedType.LPWStr)]public string Buffer;}public struct LSA_OBJECT_ATTRIBUTES{public uint Length;public IntPtr RootDirectory;public IntPtr ObjectName;public uint Attributes;public IntPtr SecurityDescriptor;public IntPtr SecurityQualityOfService;}[UnmanagedFunctionPointer(CallingConvention.StdCall)][return: MarshalAs(UnmanagedType.Bool)]public delegate bool EnumPowerSchemesProc(uint uiIndex, uint dwName, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder sName, uint dwDesc, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder sDesc, ref POWER_POLICY pp, IntPtr lParam);[UnmanagedFunctionPointer(CallingConvention.StdCall)]public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lparam);public const uint NO_ERROR 0u;public const uint PT_LOCAL 0u;public const uint DDD_REMOVE_DEFINITION 2u;public const uint DDD_EXACT_MATCH_ON_REMOVE 4u;public const uint PT_TEMPORARY 1u;public const uint PT_ROAMING 2u;public const uint PT_MANDATORY 4u;public const int WM_HOTKEY 786;public const int MOD_ALT 1;public const int MOD_CONTROL 2;public const int VK_CONTROL 17;public const ulong CM_LOCATE_DEVNODE_NORMAL 0uL;public const int CR_SUCCESS 0;public const ulong CM_REENUMERATE_NORMAL 0uL;public const uint PROCESSBASICINFORMATION 0u;public const int HCF_HIGHCONTRASTON 1;public const int SPI_SETHIGHCONTRAST 67;public const int SPIF_SENDWININICHANGE 2;public const uint STYPE_DISKTREE 0u;public const uint SECURITY_DESCRIPTOR_REVISION 1u;public const uint NO_INHERITANCE 0u;public const uint ERROR_NONE_MAPPED 1332u;public const uint RESOURCETYPE_DISK 1u;public const uint CONNECT_UPDATE_PROFILE 1u;public const int GCL_HICON -14;public const int GCL_HICONSM -34;public const uint WM_GETICON 127u;public const uint WM_CLOSE 16u;public const uint SHTDN_REASON_FLAG_PLANNED 2147483648u;public const uint EWX_FORCEIFHUNG 16u;public const uint NETSETUP_JOIN_DOMAIN 1u;public const uint NETSETUP_ACCT_CREATE 2u;public const uint NETSETUP_DOMAIN_JOIN_IF_JOINED 32u;public const uint NETSETUP_ACCT_DELETE 2u;public const uint PROCESS_VM_READ 16u;public const uint PROCESS_QUERY_INFORMATION 1024u;public const uint SC_ENUM_PROCESS_INFO 0u;public const uint SC_MANAGER_ENUMERATE_SERVICE 4u;public const uint SC_MANAGER_CREATE_SERVICE 2u;public const uint SC_MANAGER_ALL_ACCESS 983103u;public const uint SERVICE_DELETE 65536u;public const uint SERVICE_QUERY_CONFIG 1u;public const uint SERVICE_CHANGE_CONFIG 2u;public const uint SERVICE_WIN32 48u;public const uint SERVICE_DRIVER 11u;public const uint SERVICE_NO_CHANGE uint.MaxValue;public const uint SERVICE_ACTIVE 1u;public const uint SERVICE_ALL_ACCESS 983551u;public const uint SERVICE_WIN32_OWN_PROCESS 16u;public const uint SERVICE_ERROR_NORMAL 1u;public const int ERROR_INSUFFICIENT_BUFFER 122;public const uint ERROR_NO_DATA 232u;public const int HWND_TOPMOST -1;public const int HWND_NOTOPMOST -2;public const int SWP_NOMOVE 2;public const int SWP_NOSIZE 1;public const int CREATE_NEW_CONSOLE 16;public const int CREATE_UNICODE_ENVIRONMENT 1024;public const int WM_FONTCHANGE 29;public static readonly IntPtr HWND_BROADCAST new IntPtr(65535);[DllImport(Wtsapi32.dll, EntryPoint WTSQuerySessionInformationW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool WTSQuerySessionInformation(IntPtr hServer, uint SessionId, WTS_INFO_CLASS WTSInfoClass, ref IntPtr ppBuffer, ref uint pBytesReturned);[DllImport(Wtsapi32.dll)]public static extern void WTSFreeMemory(IntPtr pMemory);[DllImport(Wtsapi32.dll, EntryPoint WTSEnumerateSessionsW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool WTSEnumerateSessions(IntPtr hServer, uint Reserved, uint Version, ref IntPtr ppSessionInfo, ref uint pCount);[DllImport(logoncli.dll, SetLastError true)]public static extern int NetIsServiceAccount([In][MarshalAs(UnmanagedType.LPWStr)] string ServerName, [In][MarshalAs(UnmanagedType.LPWStr)] string AccountName, out int IsService);[DllImport(logoncli.dll, SetLastError true)]public static extern int NetRemoveServiceAccount([In][MarshalAs(UnmanagedType.LPWStr)] string ServerName, [In][MarshalAs(UnmanagedType.LPWStr)] string AccountName, uint Flags);[DllImport(logoncli.dll, SetLastError true)]public static extern int NetAddServiceAccount([In][MarshalAs(UnmanagedType.LPWStr)] string ServerName, [In][MarshalAs(UnmanagedType.LPWStr)] string AccountName, [In][MarshalAs(UnmanagedType.LPWStr)] string Reserved, uint Flags);[DllImport(advapi32.dll, SetLastError true)]public static extern uint LsaNtStatusToWinError(uint Status);[DllImport(advapi32.dll, SetLastError true)]public static extern uint LsaOpenPolicy(ref LSA_UNICODE_STRING SystemName, ref LSA_OBJECT_ATTRIBUTES ObjectAttributes, LSA_POLICY_ACCESS_MASK DesiredAccess, ref IntPtr PolicyHandle);[DllImport(advapi32.dll, SetLastError true)]public static extern uint LsaClose(IntPtr ObjectHandle);[DllImport(advapi32.dll, SetLastError true)]public static extern uint LsaAddAccountRights(IntPtr PolicyHandle, [In] byte[] AccountSid, [In] ref LSA_UNICODE_STRING UserRights, uint CountOfRights);[DllImport(advapi32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool QueryServiceStatusEx([In] IntPtr hService, uint InfoLevel, IntPtr lpBuffer, uint cbBufSize, out uint pcbBytesNeeded);[DllImport(advapi32.dll, SetLastError true)]public static extern bool ControlService(IntPtr hService, SERVICE_CONTROL_CODES dwControl, ref SERVICE_STATUS_PROCESS lpServiceStatus);[DllImport(advapi32.dll, EntryPoint ChangeServiceConfigW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool ChangeServiceConfig([In] IntPtr hService, uint dwServiceType, uint dwStartType, uint dwErrorControl, [In][MarshalAs(UnmanagedType.LPWStr)] string lpBinaryPathName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpLoadOrderGroup, IntPtr lpdwTagId, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDependencies, [In][MarshalAs(UnmanagedType.LPWStr)] string lpServiceStartName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpPassword, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDisplayName);[DllImport(advapi32.dll, EntryPoint QueryServiceConfigW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool QueryServiceConfig([In] IntPtr hService, [Out] IntPtr lpServiceConfig, uint cbBufSize, out uint pcbBytesNeeded);[DllImport(kernel32.dll, EntryPoint DefineDosDeviceW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool DefineDosDevice(uint dwFlags, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDeviceName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpTargetPath);[DllImport(Netapi32.dll, CharSet CharSet.Unicode, SetLastError true)]public static extern int NetShareEnum([MarshalAs(UnmanagedType.LPWStr)] string ServerName, int level, ref IntPtr BufPtr, int prefmaxbufferlen, ref int entriesread, ref int totalentries, ref IntPtr resume_handle);[DllImport(Netapi32.dll, CallingConvention CallingConvention.StdCall, CharSet CharSet.Unicode, SetLastError true)]public static extern NET_API_STATUS NetApiBufferFree([In] IntPtr Buffer);[DllImport(Netapi32.dll, EntryPoint DsGetDcNameW, SetLastError true)]internal static extern uint DsGetDcName([In][MarshalAs(UnmanagedType.LPTStr)] string computerName, [In][MarshalAs(UnmanagedType.LPTStr)] string domainName, [In] IntPtr domainGuid, [In][MarshalAs(UnmanagedType.LPTStr)] string siteName, [In] int flags, out IntPtr domainControllerInfo);[DllImport(advapi32.dll, EntryPoint LookupAccountSidW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool LookupAccountSid([In][MarshalAs(UnmanagedType.LPWStr)] string lpSystemName, [In] byte[] lpSid, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpName, ref uint cchName, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpReferencedDomainName, ref uint cchReferencedDomainName, out SID_NAME_USE peUse);[DllImport(kernel32.dll, SetLastError true)]public static extern uint WTSGetActiveConsoleSessionId();[DllImport(Wtsapi32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool WTSQueryUserToken(uint SessionId, ref IntPtr phToken);[DllImport(advapi32.dll, EntryPoint CreateProcessAsUserW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool CreateProcessAsUser([In] IntPtr hToken, [In][MarshalAs(UnmanagedType.LPWStr)] string lpApplicationName, [In][Out][MarshalAs(UnmanagedType.LPWStr)] string lpCommandLine, [In] IntPtr lpProcessAttributes, [In] IntPtr lpThreadAttributes, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandles, uint dwCreationFlags, [In] IntPtr lpEnvironment, [In][MarshalAs(UnmanagedType.LPWStr)] string lpCurrentDirectory, [In] ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);[DllImport(Userenv.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool DestroyEnvironmentBlock([In] IntPtr lpEnvironment);[DllImport(Userenv.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool CreateEnvironmentBlock(out IntPtr lpEnvironment, [In] IntPtr hToken, [MarshalAs(UnmanagedType.Bool)] bool bInherit);[DllImport(kernel32.dll)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool AllocConsole();[DllImport(kernel32.dll)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool FreeConsole();[DllImport(gdi32.dll, EntryPoint AddFontResourceW, SetLastError true)]public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPTStr)] string lpszFilename);[DllImport(gdi32.dll, EntryPoint RemoveFontResourceW, SetLastError true)]public static extern int RemoveFontResource([In][MarshalAs(UnmanagedType.LPTStr)] string lpszFilename);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool SetWindowPos([In] IntPtr hWnd, [In] IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool GetWindowRect([In] IntPtr hWnd, out RECT lpRect);[DllImport(Userenv.dll, EntryPoint DeleteProfileW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool DeleteProfile([In][MarshalAs(UnmanagedType.LPTStr)] string lpSidString, [In][MarshalAs(UnmanagedType.LPTStr)] string lpProfilePath, [In][MarshalAs(UnmanagedType.LPTStr)] string lpComputerName);[DllImport(kernel32.dll, EntryPoint SetComputerNameExW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool SetComputerNameEx(COMPUTER_NAME_FORMAT NameType, [In][MarshalAs(UnmanagedType.LPWStr)] string lpBuffer);[DllImport(Netapi32.dll, SetLastError true)]public static extern NET_API_STATUS NetRenameMachineInDomain([In][MarshalAs(UnmanagedType.LPWStr)] string lpServer, [In][MarshalAs(UnmanagedType.LPWStr)] string lpNewMachineName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpAccount, [In][MarshalAs(UnmanagedType.LPWStr)] string lpPassword, uint fRenameOptions);[DllImport(shell32.dll, EntryPoint SHQueryRecycleBinW)]public static extern int SHQueryRecycleBin([In][MarshalAs(UnmanagedType.LPTStr)] string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);[DllImport(shell32.dll, CallingConvention CallingConvention.StdCall, EntryPoint SHEmptyRecycleBinW, SetLastError true)]public static extern int SHEmptyRecycleBin(IntPtr hwnd, [In][MarshalAs(UnmanagedType.LPWStr)] string pszRootPath, uint dwFlags);[DllImport(Userenv.dll, EntryPoint GetProfilesDirectoryW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool GetProfilesDirectory([Out][MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpProfilesDir, ref uint lpcchSize);[DllImport(PowrProf.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool EnumPwrSchemes(EnumPowerSchemesProc lpfnPwrSchemesEnumProc, IntPtr lParam);[DllImport(PowrProf.dll, SetLastError true)]public static extern bool SetActivePwrScheme(uint uiID, [In] IntPtr lpGlobalPowerPolicy, [In] IntPtr lpPowerPolicy);[DllImport(PowrProf.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool GetActivePwrScheme(out uint uiID);[DllImport(user32.dll, SetLastError true)]public static extern IntPtr FindWindowW([In][MarshalAs(UnmanagedType.LPWStr)] string lpClassName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpWindowName);[DllImport(user32.dll, SetLastError true)]public static extern IntPtr FindWindowExW([In] IntPtr hWndParent, [In] IntPtr hWndChildAfter, [In][MarshalAs(UnmanagedType.LPWStr)] string lpszClass, [In][MarshalAs(UnmanagedType.LPWStr)] string lpszWindow);[DllImport(advapi32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool DeleteService(IntPtr hService);[DllImport(advapi32.dll, EntryPoint StartServiceW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool StartService([In] IntPtr hService, uint dwNumServiceArgs, IntPtr lpServiceArgVectors);[DllImport(advapi32.dll, EntryPoint OpenServiceW, SetLastError true)]public static extern IntPtr OpenService([In] IntPtr hSCManager, [In][MarshalAs(UnmanagedType.LPWStr)] string lpServiceName, uint dwDesiredAccess);[DllImport(advapi32.dll, EntryPoint CreateServiceW, SetLastError true)]public static extern IntPtr CreateService([In] IntPtr hSCManager, [In][MarshalAs(UnmanagedType.LPWStr)] string lpServiceName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDisplayName, uint dwDesiredAccess, uint dwServiceType, uint dwStartType, uint dwErrorControl, [In][MarshalAs(UnmanagedType.LPWStr)] string lpBinaryPathName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpLoadOrderGroup, IntPtr lpdwTagId, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDependencies, [In][MarshalAs(UnmanagedType.LPWStr)] string lpServiceStartName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpPassword);[DllImport(advapi32.dll, EntryPoint EnumServicesStatusExW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool EnumServicesStatusEx([In] IntPtr hSCManager, uint InfoLevel, uint dwServiceType, uint dwServiceState, IntPtr lpServices, uint cbBufSize, out uint pcbBytesNeeded, out uint lpServicesReturned, IntPtr lpResumeHandle, [In][MarshalAs(UnmanagedType.LPWStr)] string pszGroupName);[DllImport(advapi32.dll, EntryPoint OpenSCManagerW, SetLastError true)]public static extern IntPtr OpenSCManager([In][MarshalAs(UnmanagedType.LPWStr)] string lpMachineName, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDatabaseName, uint dwDesiredAccess);[DllImport(advapi32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool CloseServiceHandle([In] IntPtr hSCObject);[DllImport(kernel32.dll, SetLastError true)]public static extern IntPtr OpenProcess(uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool FlashWindowEx([In] ref FLASHWINFO pfwi);[DllImport(kernel32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool ReadProcessMemory([In] IntPtr hProcess, [In] IntPtr lpBaseAddress, [Out] byte[] lpBuffer, uint nSize, out uint lpNumberOfBytesRead);[DllImport(kernel32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool CloseHandle(IntPtr hObject);[DllImport(Iphlpapi.dll, SetLastError true)]public static extern uint GetInterfaceInfo([Out] IntPtr pIfTable, ref uint dwOutBufLen);[DllImport(Iphlpapi.dll, SetLastError true)]public static extern uint IpReleaseAddress(ref IP_ADAPTER_INDEX_MAP AdapterInfo);[DllImport(Iphlpapi.dll, SetLastError true)]public static extern uint IpRenewAddress(ref IP_ADAPTER_INDEX_MAP AdapterInfo);[DllImport(kernel32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool FreeLibrary([In] IntPtr hLibModule);[DllImport(kernel32.dll, EntryPoint LoadLibraryW, SetLastError true)]public static extern IntPtr LoadLibrary([In][MarshalAs(UnmanagedType.LPWStr)] string lpLibFileName);[DllImport(user32.dll, EntryPoint LoadStringW, SetLastError true)]public static extern int LoadString([In] IntPtr hInstance, uint uID, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpBuffer, int cchBufferMax);[DllImport(user32.dll, SetLastError true)]public static extern IntPtr GetDC([In] IntPtr hWnd);[DllImport(user32.dll, SetLastError true)]public static extern int ReleaseDC([In] IntPtr hWnd, [In] IntPtr hDC);[DllImport(Netapi32.dll, SetLastError true)]public static extern NET_API_STATUS NetUnjoinDomain([In][MarshalAs(UnmanagedType.LPWStr)] string lpServer, [In][MarshalAs(UnmanagedType.LPWStr)] string lpAccount, [In][MarshalAs(UnmanagedType.LPWStr)] string lpPassword, uint fUnjoinOptions);[DllImport(Netapi32.dll, SetLastError true)]public static extern NET_API_STATUS NetJoinDomain([In][MarshalAs(UnmanagedType.LPWStr)] string lpServer, [In][MarshalAs(UnmanagedType.LPWStr)] string lpDomain, [In][MarshalAs(UnmanagedType.LPWStr)] string lpAccountOU, [In][MarshalAs(UnmanagedType.LPWStr)] string lpAccount, [In][MarshalAs(UnmanagedType.LPWStr)] string lpPassword, uint fJoinOptions);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool ExitWindowsEx(uint uFlags, uint dwReason);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool EnumChildWindows([In] IntPtr hWndParent, EnumWindowsProc lpEnumFunc, [MarshalAs(UnmanagedType.SysInt)] IntPtr lParam);[DllImport(user32.dll, SetLastError true)]public static extern IntPtr SetParent([In] IntPtr hWndChild, [In] IntPtr hWndNewParent);[DllImport(user32.dll, EntryPoint SendMessageW, SetLastError true)]public static extern IntPtr SendMessage([In] IntPtr hWnd, uint Msg, uint wParam, int lParam);[DllImport(user32.dll, EntryPoint GetClassLongW, SetLastError true)]public static extern IntPtr GetClassLong([In] IntPtr hWnd, int nIndex);[DllImport(user32.dll, EntryPoint GetClassLongPtrW, SetLastError true)]public static extern IntPtr GetClassLongPtr([In] IntPtr hWnd, int nIndex);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, [MarshalAs(UnmanagedType.SysInt)] IntPtr lParam);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool IsWindowVisible([In] IntPtr hWnd);[DllImport(user32.dll, EntryPoint GetWindowTextW, SetLastError true)]public static extern int GetWindowText([In] IntPtr hWnd, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpString, int nMaxCount);[DllImport(user32.dll, EntryPoint GetWindowTextLengthW, SetLastError true)]public static extern int GetWindowTextLength([In] IntPtr hWnd);[DllImport(user32.dll, SetLastError true)]public static extern uint GetWindowThreadProcessId([In] IntPtr hWnd, out int lpdwProcessId);[DllImport(user32.dll, EntryPoint GetClassNameW, SetLastError true)]public static extern int GetClassName([In] IntPtr hWnd, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpClassName, int nMaxCount);[DllImport(Kernel32.dll, EntryPoint GetDiskFreeSpaceExW, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool GetDiskFreeSpaceEx([In][MarshalAs(UnmanagedType.LPWStr)] string lpDirectoryName, ref ulong lpFreeBytesAvailable, ref ulong lpTotalNumberOfBytes, ref ulong lpTotalNumberOfFreeBytes);[DllImport(mpr.dll, EntryPoint WNetCancelConnection2W, SetLastError true)]public static extern uint WNetCancelConnection([In][MarshalAs(UnmanagedType.LPWStr)] string lpName, uint dwFlags, [MarshalAs(UnmanagedType.Bool)] bool fForce);[DllImport(mpr.dll, EntryPoint WNetAddConnection2W, SetLastError true)]public static extern uint WNetAddConnection2(ref NETRESOURCE lpNetResource, [In][MarshalAs(UnmanagedType.LPWStr)] string lpPassword, [In][MarshalAs(UnmanagedType.LPWStr)] string lpUserName, uint dwFlags);[DllImport(netapi32.dll, CharSet CharSet.Unicode, SetLastError true)]public static extern NET_API_STATUS NetShareAdd([In][MarshalAs(UnmanagedType.LPWStr)] string servername, uint level, [In] ref SHARE_INFO_502 buf, out int parm_err);[DllImport(advapi32.dll, SetLastError true)]public static extern uint InitializeSecurityDescriptor(ref SECURITY_DESCRIPTOR pSecurityDescriptor, uint dwRevision);[DllImport(advapi32.dll, EntryPoint SetEntriesInAclW, SetLastError true)]public static extern uint SetEntriesInAcl(int cCountOfExplicitEntries, [In] ref EXPLICIT_ACCESS pListOfExplicitEntries, [In] IntPtr OldAcl, ref IntPtr NewAcl);[DllImport(advapi32.dll, SetLastError true)]public static extern uint SetSecurityDescriptorDacl(ref SECURITY_DESCRIPTOR pSecurityDescriptor, [MarshalAs(UnmanagedType.Bool)] bool bDaclPresent, [In] IntPtr pDacl, [MarshalAs(UnmanagedType.Bool)] bool bDaclDefaulted);[DllImport(advapi32.dll, SetLastError true)]public static extern uint IsValidSecurityDescriptor(ref SECURITY_DESCRIPTOR pSecurityDescriptor);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool SystemParametersInfoW(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);[DllImport(netapi32.dll, SetLastError true)]public static extern NET_API_STATUS NetShareAdd([In][MarshalAs(UnmanagedType.LPWStr)] string servername, uint level, [In] ref SHARE_INFO_2 buf, out uint parm_err);[DllImport(mpr.dll, SetLastError true)]public static extern int WNetGetConnection(string lpLocalName, StringBuilder lpRemoteName, ref int lpnLength);[DllImport(Userenv.dll, SetLastError true)]public static extern bool GetProfileType(ref uint pdwflags);[DllImport(user32.dll, SetLastError true)]public static extern IntPtr GetForegroundWindow();[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);[DllImport(user32.dll, SetLastError true)]public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);[DllImport(user32.dll, SetLastError true)]public static extern bool UnregisterHotKey(IntPtr hWnd, int id);[DllImport(Cfgmgr32.dll, SetLastError true)]public static extern uint CM_Reenumerate_DevNode(uint dnDevInst, ulong ulFlags);[DllImport(Cfgmgr32.dll, SetLastError true)]public static extern uint CM_Locate_DevNode(ref uint PdnDevInst, int pDeviceID, ulong ulFlags);[DllImport(ntdll.dll, SetLastError true)]public static extern int NtQueryInformationProcess(IntPtr handle, uint processinformationclass, ref Process_Basic_Information ProcessInformation, int ProcessInformationLength, ref uint ReturnLength);[DllImport(shell32.dll, CallingConvention CallingConvention.StdCall, EntryPoint ExtractIconExW, SetLastError true)]public static extern uint ExtractIconEx([In][MarshalAs(UnmanagedType.LPWStr)] string lpszFile, int nIconIndex, ref IntPtr phiconLarge, ref IntPtr phiconSmall, uint nIcons);[DllImport(user32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool DestroyIcon([In] IntPtr hIcon);[DllImport(kernel32.dll, SetLastError true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool IsWow64Process([In] IntPtr hProcess, out bool Wow64Process);[DllImport(kernel32.dll, CharSet CharSet.Auto, SetLastError true)][ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]public static extern IntPtr GetModuleHandle(string moduleName);[DllImport(kernel32.dll, CharSet CharSet.Ansi, ExactSpelling true, SetLastError true)]public static extern IntPtr GetProcAddress(IntPtr hModule, string methodName);}
}另外附上如何安装我们自己开发的Windows服务步骤
1.以管理员身份运行cmd2.安装windows服务cd C:\Windows\Microsoft.NET\Framework\v4.0.30319(InstallUtil.exe的路径注意InstallUtil.exe的版本号需要和项目的版本号相同)3.安装windows服务InstallUtil.exe D:\项目相关文件\MonitoringTEST\DialTest\bin\Debug\ProjectTest.exe(项目的路径)InstallUtil.exe D:\VisualStudio Files\Web.Server.Api\Web.Server.Api\bin\Debug\Web.Server.Api.exe4.启动windows服务net start TestServive(服务名称)卸载windows服务InstallUtil.exe /u D:\项目相关文件\MonitoringTEST\DialTest\bin\Debug\ProjectTest.exe
参考文章
百度关键词搜索C#在windows服务中启动第三方exe可执行程序
【Windows服务C#显式运行exe程序 | 认知自我】
【在Windows中启动或停止服务的4种方法 | 多听号 (duotin.com)】
【在window service中调用外部exe或.bat等_windows服务 启动exe文件-CSDN博客】
【Windows服务C#显式运行exe程序 - 六镇2012 - 博客园 (cnblogs.com)】
【C# windows服务中启动带UI界面的程序_c#在桌面前启动程序-CSDN博客】
【C#服务出错没有 RunInstallerAttribute.Yes 的公共安装程序-CSDN博客】
【window service 中调用外部exe-CSDN社区】
【在windows服务中调用第三方exe可执行程序】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909509.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!