Kazuki.io

プログラミングやITガジェットなどの備忘録だよ。人の役に立てばいいな。

「このセットアップはInternet Information Server 5.1かそれ以上を必要とし、...」

Visual Studio (2017)でWebアプリケーションのインストーラーを作り終わり、いざインストールをすると...

以下のメッセージが表示され、インストールできないことありませんでしたか?

f:id:kazukisaito:20180520213114p:plain

メッセージには何を言っているのかよくわからなかったですが、

「あんたのOS古すぎや!Windows XP以降のOS用意したれ!」

と言ってるっぽい。 

いや、アプリをインストールしようとしているOSはWindows 10なんですが…

 

 

そんなメッセージとは関係なく? 実はVisual StudioのSetup Projectに原因がありました。では一つ一つみていこう。

Webアプリケーション用のSetup Project

まず、そもそもだがWebアプリケーション用のSetup Projectは専用のプロジェクトがVisual Studioで用意されている。

f:id:kazukisaito:20180520214406p:plain

 

原因はWindows 10にあった!?

先程のエラーメッセージ「このセットアップはInternet Information Server 5.1かそれ以上を必要とし、...」の原因はWindows 10にありました。

その原因となる設定は以下の通りです。

 

まずはWebSetupプロジェクトを右クリックして View > 起動条件 と選択していきます。

f:id:kazukisaito:20180520214900p:plain

 

 

次にLaunch Condition画面でIIS Conditionのプロパティを確認します。

f:id:kazukisaito:20180520220519p:plain

 

注目するべきプロパティはCondtionです。

内容は下記にあるとおり

(IISMAJORVERSION >= "#5" AND IISMINORVERSION >= "#1") OR IISMAJORVERSION >= "#6"

意味としては「IISのMajor Versionが5以上かつ、Minor Versionが1以上、もしくはMajor Versionが6以上」です。(まぁそのままだけど)

f:id:kazukisaito:20180520220639p:plain

IISは各OSに対して次のバージョンで構成されているそうです。

  • Windows 2000 ... IIS 5.0
  • Windwos XP... IIS 5.1
  • Windows Server 2003 ... IIS 6.0
  • Windows Vista, Server 2008 ... IIS 7.0
  • Windows 7, Server 2008 R2 ... IIS 7.5
  • Windows 8, Server 2012 ... IIS 8.0
  • Windows 8.1, Server 2012 R2 ... IIS 8.5
  • Windows 10, Server 2016 IIS 10.0

この表を見ると一見、Windows 10も問題なさそうに思えます。

 

しかし、Windowsでは自身のIISのバージョン情報をレジストリでもっているのですが、Windows10ではこのように表示されています。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters

f:id:kazukisaito:20180520222049p:plain

なんとバージョンはaです笑。

値はHEXでもっているため、10の表記はaであり、aはIIS Conditionに記載があった5.1以上が判断つきません。

 

よって、エラーなるんだそうです。

 

じゃどうする?

回避策1 レジストリを変える。

上記のレジストリを次のように変えましょう。(非推奨)

MajorVersion 7

MinorVersion 5

要は、IISのバージョンの偽造をすることでIIS5.1より新しいよと認識させるのです。 んー。これは微妙かな。

どうしてもという時の応急処置としては使えるかも。

 

回避策2 IIS Conditionを変える。

Setup ProjectのIIS Conditionを以下の値に変える。

上記で説明していたIIS Conditionの値を以下のようにします。

((IISMAJORVERSION >= "#5" AND IISMINORVERSION >= "#1") OR IISMAJORVERSION >= "#6") OR IISMAJORVERSION = "#10"

f:id:kazukisaito:20180520222817p:plain

 #10が0x0000000aを認識してくれるみたいです。

 

結果

さて、早速インストールをしてみます。

Setup Projectをリビルドして、インストールしてましょう(要管理者権限)

f:id:kazukisaito:20180520223246p:plain

インストールが進む! 解決!

f:id:kazukisaito:20180520223318p:plain

 

Visual StudioでWebアプリケーションを開発する人ならだれでも、一度はこの問題にぶち当たるのではないでしょうか。

Microsoftさん! 惜しい!