MSI

Visual Studioのセットアッププロジェクトで生成されるMSIについて、
アンインストールできないようにするには、MSIのデータベースを弄る必要がある。
Orcaでできるけど、毎回するのは面倒なので、スクリプトをビルド後に設定し、実行させる。

Option Explicit

Const msiOpenDatabaseModeTransact = 1

Dim msiPath : msiPath = Wscript.Arguments(0)

Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDatabaseModeTransact)

Dim query
query = "INSERT INTO Property(Property, Value) VALUES('ARPNOREMOVE', '1')"
Dim view
Set view = database.OpenView(query)
view.Execute
database.Commit

なお、queryを変えるといろいろできます。

query = "INSERT INTO Property(Property, Value) VALUES('ARPNOMODIFY', '1')"

これだと、コンパネの追加/削除で、変更が使えなくなる

query = "INSERT INTO Property(Property, Value) VALUES('ARPNOREPAIR', '1')"

これだと、コンパネの追加/削除で、修復が使えなくなる

query = "INSERT INTO Property(Property, Value) VALUES('ARPSYSTEMCOMPONENT', '1')"

これだと、コンパネの追加/削除に表示されなくなる