2016-04-11 8 views
1

サービスを停止およびアンインストールする次のコードがあります。 それは正しくサービスを停止しますが、私はアンインストールしようとすると、それは私に、このエラーを与える:サービスをアンインストールしようとすると、オブジェクト参照がオブジェクトのインスタンスに設定されないc#

System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Configuration.Install.Installer.Uninstall(IDictionary savedState) 
    at System.ServiceProcess.ServiceInstaller.Uninstall(IDictionary savedState) 
    at UpdateOrca.FuncoesUpdater.StopService(String serviceName, Int32 timeoutMilliseconds, Boolean Unninstall) in C:\Users\me\Downloads\UpdateOrcaV2013\UpdateOrca\UpdateOrca\FuncoesUpdater.cs:line 165 

コード:

public void StopService(string serviceName, int timeoutMilliseconds, bool Unninstall) 
    { 
     if (ServicoInstalado(serviceName) == true) //&& ServiceRunning(serviceName) == true 
     { 
      ServiceController service = new ServiceController(serviceName); 
      try 
      { 
       TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); 

       service.Stop(); 
       service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 
       ServiceInstaller ServiceInstallerObj = new ServiceInstaller(); 
       if (Unninstall == true) 
       { 
        ServiceInstallerObj.ServiceName = serviceName; 
        ServiceInstallerObj.Uninstall(null); (LINE OF THE ERROR) 
       } 

      } 
      catch (Exception ex) 
      { 
       Program.Erro = ex.ToString(); 
       Erro NewErro = new Erro(); 
       NewErro.ShowDialog(); 
      } 
     } 
    } 

答えて

1

ServiceInstaller.Uninstall()方法は、実際にあなたが何であるかについてのコンテキスト情報の一部のタイプが必要ですアンインストール。これは、一般的にUninstall()方法にIDictionaryオブジェクトとして渡すことができますが、あなたの代わりにnullを渡すことにした場合、あなたはおそらく、明示的にコンテキストを設定する必要があります:

// Build your uninstaller 
ServiceInstaller ServiceInstallerObj = new ServiceInstaller(); 
if (Unninstall) 
{ 
     // Set a context (using a specific file to log uninstall info) 
     ServiceInstallerObj.Context = new InstallContext("{path-to-log-file}", null); 
     // Continue setting your service and uninstalling it 
     ServiceInstallerObj.ServiceName = serviceName; 
     ServiceInstallerObj.Uninstall(null); 
} 

を問題が解決しない場合は、 this related discussionに記載されているようなアプローチを試すことを検討してください。

+0

クイックアンサーのThx。それは動作します:D –

関連する問題