1

Windowsサービスのインストール時に、アプリケーションはカスタムアクションを使用して、ユーザーがインストールダイアログテキストボックスに入力した内容に応じて、そのサービスのServiceNameとDisplayNameを設定します。

このアプリケーションのテストでは、インストールには問題なく機能しますが、サービスをアンインストールしようとすると、エラー1001が発生します。サービスが存在しません。

ここに画像の説明を入力してください

私はそれを実行できるので、これは最終的には真実ではありません。したがって、私の現在の考えは、サービスのカスタム名に何らかの方法でアクセスし、それをアンインストーラーにフィードする必要があるということです。これはすべてGUIDベースであり、名前はほとんど無関係になると思いました。re:uninstallですが、そうではないようです。

では、この問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

Installerインスタンスと一緒に派生クラスを使用していると仮定しServiceInstallerます。

私はプロジェクトで同じようなことをします。サービス名はテキストファイル内に保存されます(これは単なるオプションですが、私にとっては自動展開の目的であります)。どこにでも保存できます(レジストリなど)。

したがって、インストールフェーズで構成されたカスタムサービス名をどこかに保持する必要があります。

だから、私は私のInstallerクラスを持っています:

[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer

そして、そのコンストラクターでは、次のことを行います。

_process = new ServiceProcessInstaller { Account = ServiceAccount.LocalSystem };
_service = new ServiceInstaller { ServiceName = ServiceNameReader.GetServiceName(), StartType = ServiceStartMode.Automatic };
Installers.Add(_process);
Installers.Add(_service);

関数に注意してくださいServiceNameReader.GetServiceName()。このカスタム関数は、ファイルからサービス名を取得します。Installerクラスはインスタンス化され、アンインストール中にも呼び出されます。したがって、このようなことを行うと、実際のサービス名をどこかから動的にロードするために、それを正常にアンインストールできるようになります。

于 2012-06-24T06:43:30.307 に答える