■症状
- Windowsサービスのインストーラを実行すると、サービスを開始する特権がないと言われてインストールが正常に完了できない。
- イベントビューアーを確認すると、インストール自体は完了しているがサービスの起動に失敗している(イベントID:1033)。
■発生環境
- 対象OS: Windows 10 Pro x64 (手元にHomeが無いのでわかりませんが、エディション問わず発生する?)
- 上記Windows 10 Proは、Windows 7 ProのゲストOSとして起動している(VMware)
- Windowsサービスをインストールするmsiを実行する(実務で使用しているサービスでした)
- msiは、WiX Toolsetを用いて作られたもの。
- 当該Windowsサービスのターゲットフレームワークは.NET 3.5 SP1
- インストール時のサービスログオンアカウントはLocalService
- UACは「通知しない」設定後、OS再起動済み
- OSのログオンアカウントはAdministrator権限のもの
■参考キャプチャ(サービス名は消去しています)
■さて…LocalServiceアカウントに対して特権がないとはこれいかに
ふーむ、LocalServiceで開始する特権がないとな…。
タスクマネージャを見ても、LocalServiceで起動しているサービスは沢山おりますがな。
試しにLocalServiceで動作している動作中のsqlbrowser.exe
を停止/開始してみる。
…何も問題ないじゃない。
特権がないとはいったい・・・うごごご!
(とはいえこの辺でさすがに何となく権限うんぬんが問題じゃないんじゃないかと察してくる。)
■状況の整理
- 本サービスは既定でLocalServiceでインストールされる
- Windows 10 Pro(x86|x64ともに)導入実績あり
- 対象マシンと別のデスクトップ Windows 10 Pro x64でインストールしてエラー無く開始までできる
- 別のゲストOS Windows 7 Professional では素のOSに 問題なくインストール、サービス開始できた
うーん、マシン固有の問題か…?
Windows 10 Pro 間で差があるということは、何か足りてないんだろうなぁ、という自分なりの結論に。
といろいろ考えて、Windows 10マシンをセットアップするときに無意識にやっていること、
ありました、思い出しましたよ。
素のWindows 10 には.NET Framework 3.5がプリインストールされていないですよ。
サービス本体のターゲットフレームは.NET Framework 3.5 SP1。
一方、.NET Framework 4系では3.5以下は互換性がない。
冒頭のエラーメッセージと関係が今ひとつ繋がらない気がするけど(私が無知なだけかも)、
まああてずっぽうですがまずは.NET Framework 3.5 SP1 をインストールしてみる。
(心の声:まあ、解決するわきゃないな。)
⇒__問題解決。うそーん。__
■今後の課題
- WiX Toolset固有の問題か、Visual Studioのsetupプロジェクトでも発生するものかの切り分け(msiなのはどっちも同じだが)
- Windows 10 Home でも再現するか
- 「サービスを開始する『特権』がない」と、ターゲットフレームワークが未インストールであることの関係調査