インストール パッケージでは、ユーザー (必ずしも管理者である必要はありません) は、現在のユーザー (CU) またはすべてのユーザー (AU) に対してアプリケーションをインストールすることを選択するオプションがあります。CU が選択されると、カスタム アクション (VB スクリプトなど) が HKCU レジストリに何かを書き込みます。一方、AU が選択されている場合 (管理者用)、同じスクリプトが同じ内容を HKLM に書き込みます。
これは、WinXP 以下では問題ありません。しかし、Win7 の場合、ご想像のとおり、これは UAC のために問題を引き起こしています。ユーザーはいつでもEXE ファイルで右クリック -> [管理者として実行] を実行するか、UAC を一時的にオフにすることができますが、これは元の要件を満たすものではなく、通常のユーザーはインストーラーを実行するために昇格する必要はありません。
私が試した回避策は、Require Administrative Privilegesプロジェクト プロパティをYesに設定することです。ただし、上記のように通常のユーザーには当てはまりません。
オンデマンドで昇格を要求する手段はありますか? ユーザーがAUを選択した場合、プログラムをダブルクリックするのではなく、インストール手順を実行する直前に昇格を要求することを考えています。以下のスニペットで私のコメントを参照してください。
Sub AddRegistryKey(key, value)
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
If Session.Property("ALLUSERS") <> "1" Then
' Can I request for elevation at this point?
Session.Property("PathToRegistryKeys") = Session.Property("PathToRegistryKeysUser") ' HKCU
Else
Session.Property("PathToRegistryKeys") = Session.Property("PathToRegistryKeysAll") ' HKLM
End If
WshShell.RegWrite Session.Property("PathToRegistryKeys")&Session.Property("ProductCode")&"\"&key&"\", value, "REG_SZ"
End Sub