6

installutil: を使用して Windows サービスをインストールしようとしていますinstallutil /u GSIS.FileMoverService.exe

私が得る出力は次のとおりです。

アセンブリ 'C:\FMS\GSIS.FileMoverService.exe' をアンインストールしています。影響を受けるパラメータは次のとおりです。

logtoconsole = ログファイル = C:\FMS\GSIS.FileMoverService.InstallLog

assemblypath = C:\FMS\GSIS.FileMoverService.exe EventLog ソース ファイル ムーバー サービスを削除しています。

警告: ソース ファイル ムーバー サービスがローカル マシンに登録されていません。Service File Mover Service はシステムから削除されています...

System.ServiceProcess.ServiceInstaller インストーラーのアンインストール中に例外が発生しました。System.ComponentModel.Win32Exception: 指定されたサービスはインストールされたサービスとして存在しません アンインストール中に例外が発生しました。

この例外は無視され、アンインストールが続行されます。ただし、アンインストールが完了した後、アプリケーションが完全にアンインストールされない場合があります。

アンインストールしようとすると、サービスが停止しました。それは間違いなくサービスとして登録されています。再起動しましたが、サービス アプレット (services.msc) にまだ表示されています。サービス アプレットからも正常に開始および停止されるため、インストールに失敗した (または部分的にしかインストールされていない) ようには見えません。

VS2010 コマンド プロンプト ([管理者として実行] をクリック) から installutil を呼び出しています。

何か案は?

4

2 に答える 2

14

結局、私sc delete GSIS.FileMoverServiceはサービスを削除していました。これはうまくいきました。

于 2012-11-28T15:51:56.370 に答える
3

したがって、これは System.Configuration.Install.Installer を拡張しているクラスに関係していると思います。クラスのコンストラクターでは、次のように System.ServiceProcess.ServiceProcessInstaller と System.ServiceProcess.ServiceInstaller をインストーラーに追加する必要があります。

public MyServiceInstaller(string displayName = null, string description = null, ServiceAccount account = ServiceAccount.LocalSystem, string username = "", string password = "", ServiceStartMode startType = ServiceStartMode.Automatic, bool delayedAutoStart = false, string[] servicesDependedOn = null)
{
    Installers.Add(new ServiceProcessInstaller
        {
            Account = ServiceAccount.LocalSystem,
            Username = username,
            Password = password
        });
Installers.Add(new ServiceInstaller
    {
        ServiceName = GetType().Name,
        StartType = startType,
        DisplayName = displayName ?? serviceName,
        Description = description ?? string.Empty,
        ServicesDependedOn = servicesDependedOn,
        DelayedAutoStart = delayedAutoStart
    });

}

ServiceInstaller の ServiceName は、サービスのインストール時に ServiceInstaller に割り当てられた ServiceName と一致する必要があります。そうでない場合、アンインストールを試行する前にインストールされたサービスを見つけることができないため、この例外が発生します。

于 2013-12-06T19:01:49.400 に答える