Domanda

ho scritto un programma di installazione che installa un servizio di Windows (A) che ha bisogno di start / stop un altro servizio (B). Tuttavia, quando un tenta di start / stop B, ottengo questa eccezione:

System.InvalidOperationException: Impossibile servizio MyService aperta nel computer ''. ---> System.ComponentModel.Win32Exception: Accesso negato

Il programma di installazione consente di installare il servizio come un servizio locale, e richiede diritti di amministratore attraverso l'UAC pop-up, che mi concedo. Ho anche aggiunto un file app.manifest al servizio che è impostato per chiedere diritti di amministratore:

Ma io sto ancora ricevendo questo errore.

Questo è il modo di iniziare il servizio (arresto è lo stesso, tranne che chiama Stop, ovviamente):

using (Mutex mutex = new Mutex(false, "MyServiceLock"))
{
    mutex.WaitOne();

    if (ServiceExists(serviceName) == true)
    {
        using (ServiceController serviceController = new ServiceController(serviceName, "."))
        {
            serviceController.Start(); // this line throws the exception
        }
    }

    mutex.ReleaseMutex();
}

Perché l'accesso a questo servizio potrebbe essere negato?

È stato utile?

Soluzione

Un servizio non può chiedere un controllo account utente. Sembra a me che il prompt UAC che descrivi è effettivamente richiesto dal programma di installazione, non il servizio. Servizi eseguiti con un account molto privilegiata già, LocalSystem per impostazione predefinita. Facciamo in modo che si configura il servizio per utilizzare un account come privilegiati, non un account utente limitato.

Altri suggerimenti

Come un test rapido, se si apre fino services.msc e controllare il vostro server per "Esegui come" e immettere le credenziali, non l'errore di andare via? Può essere che il LocalService non ha accesso per arrestare altri servizi. Fornire il prompt UAC è permesso probabilmente solo consente di installare il servizio in primo luogo, non dicendogli di eseguire come amministratore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top