1

.Net 3.5

-i 機能を使用してそれ自体をインストールする機能をサービス exe に組み込みました。私はカスタムインストーラークラスを持っており、ここでオンラインで見つけた一般的な手法を使用しています。そのインストーラー クラスには、基本的に独自のサービスとサービス プロセス インストーラーがあります。

このコードは非常に長い間うまく機能しています。最後に、インストールを拒否した Win 7 64 ビット マシンに遭遇しました。

基本的に、ログはサービスをインストールしていることを示しており、それは成功しています。次に、イベントログを作成しようとしますが、失敗します

インストール フェーズ中に例外が発生しました。System.ComponentModel.Win32Exception: 指定されたサービスは既に存在します

OS を最初から完全に再インストールしたところ、最初にサービスとしてインストールしようとしましたが、同じエラーです。イベントログが既にあると考えているのはなぜですか?

私はすでに他のすべての投稿を読んでおり、レジストリを参照しましたが、サービスまたはイベント ログには何もありません。私は完全な管理者権限を持っています。管理者として cmd を開こうとしてもプロンプトが表示されません。私が知る限り、私は管理者です (ユーザー プロファイルで確認できます)。

EventLog が見つかったかどうかを確認するためのコードを追加しSystem.Diagnostics.EventLog.SourceExistsましたSystem.Diagnostics.EventLog.DeleteEventSource

から EventLog インストーラーを削除しようとしましたServiceInstallerが、他の理由で失敗し始めます。

何か案は?

これは、私が試した別のインストーラーのサンプル コードで、ここで同じ結果が得られました。

public partial class Service1Installer : Installer
{
    public Service1Installer()
    {
        InitializeComponent();
        ServiceProcessInstaller process = new ServiceProcessInstaller();
        process.Account = ServiceAccount.LocalSystem;

        ServiceInstaller serviceAdmin = new ServiceInstaller();
        serviceAdmin.StartType = ServiceStartMode.Manual;
        serviceAdmin.ServiceName = "Service1";
        serviceAdmin.DisplayName = "Service1";
        serviceAdmin.Description = "Service1";

        Installers.Add(serviceAdmin);
        Installers.Add(process );
    }
}
4

3 に答える 3

1

サービスをアンインストールする

  installutil /u yourproject.exe

マシンを再起動します

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.80).aspx

まだ問題がある場合はお知らせください

于 2012-02-23T21:50:16.900 に答える
0

結局、私の問題は内部インストーラーでした。コメントアウトして、コマンドラインからサービスをインストールするだけで、64 ビット OS にインストールされるようになりました。32ビットで以前に動作する理由はまだわかりません。

于 2012-08-24T20:56:04.513 に答える
0

exeがまだディスクに存在する場合は、@ MicahArmantroutが言及しているようにinstallutilを使用してください。

それ以外の場合は、管理者としてコマンドラインを開き、次を実行します。sc delete "my service name"

于 2012-02-23T21:56:36.540 に答える