2012-05-03 15 views
15

ho creato un servizio di finestra e di installarlo ho creato il suo progetto di distribuzione ed ho installato questo. Dopo l'installazione l'ho fissato. È iniziato con successo.errore durante l'installazione del servizio finestra System.Security.SecurityException

Il giorno successivo ho apportato alcune modifiche, ricostruito e reinstallato, ma ora non si sta installando.

Poi ho pensato al suo problema con il programma di installazione, consente di creare un programma di installazione personalizzato per il servizio in modo che ogni volta che posso aggiornare il mio codice.

L'ho creato in questo modo se qualcuno avesse bisogno di questo per il futuro.

public class MyInstaller : Installer 
    { 
     ServiceProcessInstaller spi; 
     ServiceInstaller si; 
     public MyInstaller() 
     {    
      spi = new ServiceProcessInstaller(); 
      spi.Account = ServiceAccount.LocalSystem; 

      si = new ServiceInstaller(); 
      si.StartType = ServiceStartMode.Manual; 
      si.ServiceName = "MyService"; 
      si.DisplayName = "My Service"; 
      si.Description = "service installed from command line"; 

      this.Installers.Add(spi); 
      this.Installers.Add(si); 

     } 
} 

L'ho chiamato dal metodo principale controllando il parametro args.

      case "-i": 
          case "-install": 
           ti = new TransactedInstaller(); 
           mi = new MyInstaller(); 
           ti.Installers.Add(mi); 
           string logPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\install.log"; 
           ctx = new InstallContext(logPath, cmdline); 
           ti.Context = ctx; //.Context (ctx); 
           ti.Install(new Hashtable()); 
           break; 

Ora, quando sto cercando di installare. ho recevied errore System.Security.SecurityException: non è stata trovata La fonte, ma alcuni o tutti i registri di eventi non poteva essere cercato. Log inaccessibile: sicurezza.

Io google, e veniamo a sapere che il servizio tenterà di accedere al registro dell'applicazione durante l'installazione e scrivere il registro lì.

non sto scrivendo alcun registro eventi. Ho il mio log4net per la registrazione. Ma ancora il suo comportamento predefinito.

come superare questo problema adesso? Non viene installato nemmeno ho tutte le autorizzazioni.

Grazie

risposta

56

Ho scoperto che a volte potrebbe essere necessario "Esegui come amministratore". Se si installa da un prompt dei comandi, potrebbe essere necessario avviare che con "Esegui come amministratore".

+0

L'ho fatto utilizzando Cntrl + Maiusc + Invio in esecuzione.Poi di nuovo ho fatto clic con il tasto destro del mouse e ho eseguito come amministratore e ha funzionato. grazie che errori stupidi sto facendo. ma mi piacerebbe sapere come migliorare le prestazioni di avvio/arresto del servizio finestra. – sunder

+0

@sunder: le prestazioni di avvio/arresto avranno un * lotto * da fare con ciò che sta facendo il tuo servizio. 'Start' dovrebbe essere OK dato che tipicamente si gira un nuovo thread che fa il lavoro. Per fermarti hai bisogno di un modo rapido per interrompere il thread. Quindi non esiste un modo generico per migliorare le prestazioni. –

+0

Ho creato un file batch (.BAT) per installare il servizio e stavo eseguendo il batch come amministratore ma non funzionava. Quindi, eseguo il prompt dei comandi come amministratore e ho installato il servizio senza il file BAT, semplicemente digitando il nome del file EXE -install. Non sono sicuro del perché sia ​​successo, ma forse potrebbe aiutare gli altri. Penso che potrebbe essere correlato al fatto che l'esecuzione di un file BAT come admin non sta eseguendo il codice che scrivi lì come amministratore, solo il file BAT. –

1

Avrei potuto avere una causa radice separata per il messaggio, ma l'ho risolto cambiando il mio servizio per eseguire come LocalSystem (che è quello che voglio comunque) invece di LocalService.

0

Posso confermare che nella sezione "Windows 7 a 64 bit" e "Windows 10" è necessario:

1) eseguire prompt dei comandi di Visual Studio come amministratore (tasto destro del mouse .. altre .. tun come admin)

enter image description here

2) vai alla cartella "obj" dove hai l'exe. (cd [all path to \ obj]) 3) lanciare installutil [myservice.exe]

se non viene eseguito come "admin", fallisce anche sul vecchio win7. :(

nota: MSDN non spiegarlo:

(a: https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer)

"Per installare un servizio di Windows, è necessario disporre di credenziali amministrative sul computer sul quale si sta installando esso."

:)

Problemi correlati