2016-03-28 6 views
1

Я хочу установить службу в Service Manager и запустить ее. Мой код выглядит следующим образом: Установка служб Windows на 64-битных системах с использованием advapi32.dll

using System; 
using System.Runtime.InteropServices; 
class Ana 
{ 
    static void Main() 
    { 
     IntPtr sc_handle=OpenSCManager(null,null,2); 
     IntPtr sv_handle = CreateService(sc_handle, "deneme", "deneme", 16, 16, 2, 0, @"D:\ServisDeneme2.exe", null, null, null, null, null); 
     int i=StartService(sv_handle,0,null); 
     CloseServiceHandle(sc_handle); 
    } 

    [DllImport("advapi32.dll")] 
    public static extern IntPtr OpenSCManager(string machine, string db, int parameter); 

    [DllImport("advapi32.dll")] 
    public static extern IntPtr CreateService(IntPtr SC_HANDLE, string lpSvcName, string lpDisplayName, int dwDesiredAccess, int dwServiceType, int dwStartType, int dwErrorControl, string lpPathName, string lpLoadOrderGroup, object lpdwTagId, string lpDependencies, string lpServiceStartName, string lpPassword); 

    [DllImport("advapi32.dll")] 
    public static extern void CloseServiceHandle(IntPtr SCHANDLE); 

    [DllImport("advapi32.dll")] 
    public static extern int StartService(IntPtr SVHANDLE, int dwNumServiceArgs, string[] lpServiceArgVectors); 
} 

Этот код отлично работает на моем 32-битном компьютере, но не работает на 64-битном компьютере. Как я могу выполнить ту же работу для 64-битного?

+1

Декларации ошибочны. Прямо сейчас вы обязательно попадаете на аргумент lpdwTagId CreateService, это фактически 'out int'. Вы, вероятно, не хотите использовать его вообще, объявите его * object * и передайте null. StartService также неверен, а не фатальный, последним аргументом является строка []. –

+0

Я отредактировал код. Теперь он работает на моем 32-битном компьютере. Но как я могу заставить его работать на 64 бит? – user1067742

ответ

0

Я бы предположил, что вам нужно будет скомпилировать приложение в x86 для правильной работы на 64-битной машине.

Или вы можете сделать что-то, как этот парень сделал:

Using a 32bit or 64bit dll in C# DllImport

0

Я сделал это! Проблема не в правах администратора. Это не связано с различием 32 бит/64 бит. Чтобы создать, запустить, остановить службу, программа управления службами должна иметь права администратора. Я запустил командную строку с правами администратора, и программа работала.