c # - Ændring af sti til eksekverbar af Windows-tjeneste

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive konsol ansøgning for at ændre stien til eksekverbar af windows service. Mere præcist skal det tage servicenavn som argument og derefter ændre servicevej til eksekverbar til givet.
Desværre kan jeg ikke finde nogen information om, hvordan man opnår det, måske kan en person med mere erfaring give noget råd?


Jeg fandt nogle interessante oplysninger her https://msdn.microsoft.com/en-us/en-en/library/system.diagnostics.process(v=vs.110).aspx men det hjalp mig heller ikke. [[[4]

Bedste reference


Hvis du ikke kan kalde sc.exe for at gøre det, kan du bruge interop-koden fra dette svar og tilføje som følger:


    public static void SetWindowsServicePath(string serviceName, string binPath)
    {
        IntPtr hManager = IntPtr.Zero;
        IntPtr hService = IntPtr.Zero;
        try
        {
            hManager = OpenSCManager(null, null, SC\_MANAGER\_ALL\_ACCESS);
            if (hManager == IntPtr.Zero)
            {
                ThrowWin32Exception();
            }
            hService = OpenService(hManager, serviceName, SERVICE\_QUERY\_CONFIG | SERVICE\_CHANGE\_CONFIG);
            if (hService == IntPtr.Zero)
            {
                ThrowWin32Exception();
            }

            if (!ChangeServiceConfig(hService, SERVICE\_NO\_CHANGE, SERVICE\_NO\_CHANGE, SERVICE\_NO\_CHANGE, binPath, null, IntPtr.Zero, null, null, null, null))
            {
                ThrowWin32Exception();
            }
        }
        finally
        {
            if (hService != IntPtr.Zero) CloseServiceHandle(hService);
            if (hManager != IntPtr.Zero) CloseServiceHandle(hManager);
        }
    }


Per sc.exe kræver denne kode administratorrettigheder for at åbne SCM.