1

ネイティブ NT サービスをインストールする WiX で書かれた単純な msi があります。msi にいくつかの変更を加えた後、StartServices 標準アクションで「サービスを開始できませんでした。十分な権限があることを確認してください」というエラーで失敗します。無視を押してサービスを手動で開始すると、正常に開始されます。問題は、権限が不十分であることではありません。このような問題を診断/デバッグするにはどうすればよいですか? Windows インストーラーの詳細ログには、役立つ情報が含まれていないようです。

4

2 に答える 2

5

エラーはインストーラーによってのみ表示されるため、インストーラーには有用な情報がありません。これが私がこれにアプローチする方法です。

ServiceControl 要素をコメントアウトして、インストーラーがサービスを開始しようとしないようにします。インストーラーを実行し、すべてを終了します。サービスを手動で開始します。

サービスが開始された場合、これはある種の競合状態を示しています。一般的なシナリオの 1 つは、サービスが GAC または WinSXS にインストールされているファイルに依存している場合です。インストーラーは、PublishAssemblies 標準アクションを使用して、これらのファイルをそこに配置します。ただし、GAC および WinSXS API はトランザショナル インストールをサポートしていないため、PublishAssemblies はコミット フェーズまで待機して作業を実行します。これは、インストーラーがサービスの開始を試みた後です。もう 1 つの一般的なシナリオは、サービスに必要なものをインストールまたは構成するカスタム アクションがあり、それをインストールの後半まで行っていた場合です。

サービスがまだ開始されない場合は、通常、競合状態が除外されます。サービス自体をプロファイリングする必要があります。depends、ildasm (.net の場合)、および processexplorer (filemon / regmon ) などのツールを使用して、欠落している依存関係を見つけようとします。インストーラーを更新してから、すすいで繰り返します。

于 2013-06-02T11:56:27.507 に答える
1

お気づきのように、Windows インストーラーは、サービスの開始に失敗した場合、有用な情報を提供しません。ただし、ダイアログが表示されると、マシンは問題の原因を特定するのに最適な状態になります。そのため、インストールをキャンセルするのではなく、デバッグを開始してください。サービスを開始して、詳細情報が得られるかどうかを確認してください。そうでない場合は、デバッガーを中断して町に行きます。

基本的に、このFireGiant KB Articleに記載されているプロセスに従います。これは、サービスの開始に失敗した理由を突き止めるための最も直接的なアプローチです。残念なことに、Windows インストーラ自体がより適切なメッセージを提供できなかったのです。

于 2013-06-22T21:34:16.773 に答える