**唯一のセットアップを使用して行うことが要求されている場合は、従ってください。
これは、既存のサービスの削除(アンインストール)してから新しいバージョンをインストールすることを可能にする明示的な実装によって処理することができます。このため 、私たちは以下のようProjectInstaller.Designer.csを更新する必要があります。
があなたの現在のインストーラの前に既存のサービスをアンインストールするためのイベントが再びサービスをインストールしようとするとトリガーのInitializeComponent()の先頭に次の行を追加することを検討してください。ここでは、サービスが既に存在する場合はアンインストールします。
次の名前空間を追加します。前に述べたよう
using System.Collections.Generic;
using System.ServiceProcess;
は、コードの行の下に追加します。
this.BeforeInstall += new
System.Configuration.Install.InstallEventHandler(ProjectInstaller_BeforeInstall);
例:
private void InitializeComponent()
{
this.BeforeInstall += new System.Configuration.Install.InstallEventHandler(ProjectInstaller_BeforeInstall);
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
//
// serviceInstaller1
//
this.serviceInstaller1.Description = "This is my service name description";
this.serviceInstaller1.ServiceName = "MyServiceName";
this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[]{
this.serviceProcessInstaller1,
this.serviceInstaller1
}
);
}
イベントによって呼び出される以下のコードは、その後アンインストールされますもしあればサービス。
void ProjectInstaller_BeforeInstall(object sender, System.Configuration.Install.InstallEventArgs e)
{
List<ServiceController> services = new List<ServiceController>(ServiceController.GetServices());
foreach (ServiceController s in services)
{
if (s.ServiceName == this.serviceInstaller1.ServiceName)
{
ServiceInstaller ServiceInstallerObj = new ServiceInstaller();
ServiceInstallerObj.Context = new System.Configuration.Install.InstallContext();
ServiceInstallerObj.Context = Context;
ServiceInstallerObj.ServiceName = "MyServiceName";
ServiceInstallerObj.Uninstall(null);
break;
}
}
}
PS:上記の変更に伴い、また、念のために
サービス名とサービス表示名があります。時には、services.mscの "name"列がサービスの表示名であることを忘れることがあります。サービス名を右クリックしてプロパティに移動し、サービス名を取得します。 – Tung
@Tung私はそれを確認した。彼らはどちらも同じだ。 –
http://www.superuser.comに移行しますか?これは実際にプログラミングに関する質問ではありません。 – CodingWithSpike