0

Visual Studio 2008 で軽量 (VC++、.Net なし) Windows サービスを作成しました。これには、Visual Studio セットアップ プロジェクトが含まれます。
セットアップ プロジェクトには、sc.exe の単純な呼び出し (「コミット」セクションでの作成と開始、「アンインストール」セクションでの削除) という 3 つのカスタム アクションがあります。これはいくつかの異なる Win7 マシンでは問題なく動作しますが、XP マシンでは失敗し (Virtual PC の「Windows XP モード」でも失敗します)、msiexec 詳細ログにエラー 1721 が表示されます:「この Windows インストーラー パッケージには問題があります。プログラムこのインストールを完了するために必要な を実行できませんでした。サポート担当者またはパッケージ ベンダーに連絡してください。」

カスタム アクションを削除すると、WinXP マシンで問題なくインストールが完了します。インストールが完了した後、コマンド ラインから sc.exe を呼び出してサービスを作成および開始することもできます (同じ権限を持つ同じユーザーによって実行されます)。
Orca は、カスタム アクションのタイプを、[コミット] セクションのアクションの場合は 3586、[アンインストール] セクションのアクションの場合は 3074 として表示します。

調査:
いくつかのスタック オーバーフローの回答と他のサイトでは、原因が権限の不足であることを示唆しており (また、Win7 にインストールする場合、UAC ダイアログが表示されます)、「Runas」を使用することを提案していますが、サービスは不明なマシンにインストールされます。どのユーザーとどの権限が存在するか、およびローカル システム アカウントで CMD.exe を実行するにはどうすればよいですか? システム アカウントの使用は、単純なカスタム アクションで実現するには多すぎる可能性があることを示唆しています。
他の質問/回答のほとんどは、オーバーヘッドが追加される WiX に関するものであり、これほど小さなプロジェクトでは回避したいと考えています。

インストーラーと結果として得られるサービスの前提条件はできるだけ少なくし、インストールには .msi ファイルの実行のみを必要とする必要があります。

それとも、誤解されており、インストーラーがインストール時にサービスを作成して開始できるようにするより良い方法がありますか?

4

0 に答える 0