рд╕реЗрд╡рд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдмрдВрдзрдХ (SCM)
SCM рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рджреВрд░рд╕реНрде рдкреНрд░рдмрдВрдзрди (рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ) рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрдХ рд╕рд░реНрд╡рд░ рд╣реИред
рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗрд╡рд╛ рдЙрд╕реЗ рд╕реМрдВрдкреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди SCM рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЦреБрдж рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред SCM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
C # рдореЗрдВ SCM рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦреЗрдВред
рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public ref class ServiceControlManager : public IDisposable { public: ServiceControlManager(void); void AddDriver(String^ ServiceName, String^ BinaryPathName); void DeleteDriver(String^ ServiceName); void StartDriver(String^ ServiceName); void StopDriver(String^ ServiceName); protected: ~ServiceControlManager(); !ServiceControlManager(); private: SC_HANDLE SCMHandle; };
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░, рдлрд╝рд╛рдЗрдирд▓реАрдЬрд╝рд░, рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ, рдХреЗрд╡рд▓ SCM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ HANDLE рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ SCM рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧреА, рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИрдВред рд╡рд░реНрдЧ рдПрдХ рдмрдлрд░ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ C ++ / cli рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ .NET рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ C # рдореЗрдВред
рддреНрд░реБрдЯрд┐ рд╕рдорд╛рдзрд╛рди
рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ SCM рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреА рд╡рд╛рдкрд╕реА рд╣реИ, рдЬреЛ .NET рдХреЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рдорд╛рди рд╢реНрд░реЗрдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
[Serializable] public ref class KernelErrorException : Exception { public: KernelErrorException(void); virtual String^ ToString() override; property virtual String^ Message { String^ get() override; }; property virtual DWORD Errorsource { DWORD get(); }; private: DWORD errorsource; internal: KernelErrorException(DWORD Errorsource); };
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд╡рд╣ рдХреЛрдб рд╕рдВрдЦреНтАНрдпрд╛ рдЬреЛ GetLastError () рд╕реЗ рдкреНрд░рд╛рдкреНтАНрдд рд╣реЛрдЧреАред рдФрд░ рдЬрдм рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рд╕рд┐рд╕реНрдЯрдо :: рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрджреЗрд╢ рд╡рд┐рд╡рд░рдг рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рдореЗрдВ рджреЛ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ: рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдмрдЪрд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ - рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж GetLastError () рдХрдорд╛рдВрдб рдЧрд▓рдд рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреАрдЯреАрдЖрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ (рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреАрдЯреАрдЖрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ)ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди KernelErrorException::KernelErrorException(void) { this->errorsource = GetLastError(); } KernelErrorException::KernelErrorException(DWORD Errorsource) { this->errorsource = Errorsource; }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд░реАрдХреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рд╣реЛрдЧрд╛:
String^ KernelErrorException::Message::get() { LPTSTR message = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, this->errorsource, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&message, 0, NULL); String^ messageString = gcnew String(message); LocalFree(message); return messageString; } DWORD KernelErrorException::Errorsource::get() { return this->errorsource; } String^ KernelErrorException::ToString() { return this->Message::get(); }
рдПрд╕рд╕реАрдПрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдордВрдЬреВрд░реА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП
.NET рдореЗрдВ SCM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛: SCM рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реНрд╡рдпрдВ рдХрдЪрд░рд╛ рдбрдВрдк рд╕реЗ рдирд┐рдкрдЯрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░
рдлрд╝рд╛рдЗрдирд▓реАрдЬрд╝рд░ рдХрд╛ рдХрдбрд╝рд╛рдИ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ,
рдбрд┐рд╕реНрдкреЛрдЬрд╝ -рдкреИрдЯрд░реНрди рдХреЗ рддрд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░,
рдлрд╝рд╛рдЗрдирд▓реАрдЬрд╝рд░ рдХреЛ [рдзрдиреНрдпрд╡рд╛рдж
GraD_Kh ] рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрдирд▓реАрдЬрд╝рд░ рдиреЗ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ:
ServiceControlManager::ServiceControlManager(void) { this->SCMHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!this->SCMHandle) throw gcnew KernelErrorException(); } ServiceControlManager::~ServiceControlManager() { this->!ServiceControlManager(); GC::SuppressFinalize(this); } ServiceControlManager::!ServiceControlManager() { CloseServiceHandle(this->SCMHandle)); }
рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛
рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдзрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди void ServiceControlManager::AddDriver(String^ ServiceName, String^ BinaryPathName) { IntPtr serviceNamePtr = Marshal::StringToHGlobalUni(ServiceName); IntPtr binaryPathNamePtr = Marshal::StringToHGlobalUni(BinaryPathName); SC_HANDLE SCMHandleService = CreateService(this->SCMHandle, (LPCTSTR)serviceNamePtr.ToPointer(), (LPCTSTR)serviceNamePtr.ToPointer(), SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, (LPCTSTR)binaryPathNamePtr.ToPointer(), NULL, NULL, NULL, NULL, NULL); DWORD errorsource = GetLastError(); Marshal::FreeHGlobal(serviceNamePtr); Marshal::FreeHGlobal(binaryPathNamePtr); if (!SCMHandleService) throw gcnew KernelErrorException(errorsource); if (!CloseServiceHandle(SCMHandleService)) throw gcnew KernelErrorException(); } void ServiceControlManager::DeleteDriver(String^ ServiceName) { IntPtr serviceNamePtr = Marshal::StringToHGlobalUni(ServiceName); SC_HANDLE SCMHandleService = OpenService(this->SCMHandle, (LPCTSTR)serviceNamePtr.ToPointer(), SERVICE_ALL_ACCESS); DWORD errorsource = GetLastError(); Marshal::FreeHGlobal(serviceNamePtr); if (!SCMHandleService ) throw gcnew KernelErrorException(errorsource); if (!DeleteService(SCMHandleService)) throw gcnew KernelErrorException(); if (!CloseServiceHandle(SCMHandleService)) throw gcnew KernelErrorException(); } void ServiceControlManager::StartDriver(String^ ServiceName) { IntPtr serviceNamePtr = Marshal::StringToHGlobalUni(ServiceName); SC_HANDLE SCMHandleService = OpenService(this->SCMHandle, (LPCTSTR)serviceNamePtr.ToPointer(), SERVICE_ALL_ACCESS); DWORD errorsource = GetLastError(); Marshal::FreeHGlobal(serviceNamePtr); if (!SCMHandleService) throw gcnew KernelErrorException(errorsource); if (!StartService(SCMHandleService, 0, 0)) throw gcnew KernelErrorException(); if (!CloseServiceHandle(SCMHandleService)) throw gcnew KernelErrorException(); } void ServiceControlManager::StopDriver(String^ ServiceName) { IntPtr serviceNamePtr = Marshal::StringToHGlobalUni(ServiceName); SC_HANDLE SCMHandleService = OpenService(this->SCMHandle, (LPCTSTR)serviceNamePtr.ToPointer(), SERVICE_ALL_ACCESS); DWORD errorsource = GetLastError(); Marshal::FreeHGlobal(serviceNamePtr); if (!SCMHandleService) throw gcnew KernelErrorException(errorsource); SERVICE_STATUS serviceStatus; if (!ControlService(SCMHandleService, SERVICE_CONTROL_STOP, &serviceStatus)) throw gcnew KernelErrorException(); if (!CloseServiceHandle(SCMHandleService)) throw gcnew KernelErrorException(); }
рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде sys рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред рджреВрд╕рд░рд╛ - рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рджреЛ - рдХреНрд░рдорд╢рдГ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВред
C # рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
try { using (ServiceControlManager scm = new ServiceControlManager()) { scm.AddDriver(serviceName, filePath); scm.StartDriver(serviceName); scm.StopDriver(serviceName); scm.DeleteDriver(serviceName); } } catch (Exception ex) { }
рд╕рдВрдХрд▓рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдвреЗрд░ рдХреЗ рдмреАрдЪ рд▓рдЧрд╛рддрд╛рд░ рдорд╛рд░реНрд╢рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдорд╛рд░реНрд╢рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
using namespace System::Runtime::InteropServices;
рд▓рд┐рдмрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:
#pragma comment(lib, "Advapi32.lib")
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕:

рдЕрдВрддрднрд╛рд╖рдг
рдХрдИ рд▓реЛрдЧ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдорд╛рд░реНрд╢рд▓реЛрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ C # рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдореЗрд░рд╛ рдирд┐рд░реНрдгрдп рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рдЪрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред / рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ x64 рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ DLLImport рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рд╡реЗ рдореБрдЭреЗ рд╕рдордЭреЗрдВрдЧреЗ ... /
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде GitHub рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд░реЛрдд