1

HKCU でレジストリ キーを読み取るコンソール プログラムがあります。

OpenSubKey("Software\\Autodesk\\AutoCAD")

Custom Actionプログラムは問題なく動作しますが、インストール プロジェクトで使用しようとすると、null値が返されました。

以下にいくつかの提案を示します。

  1. UAC (ユーザー アカウント制御) をオフにすると、問題が解決します。
  2. このコンソールをダブルクリックして実行できれば、UAC がオンになっていても正常に動作します。
4

3 に答える 3

2

null例外をスローするのではなく返される場合、それはアクセス許可の問題ではなく、キーが存在しないということです。OpenSubKey:

指定されたサブキーが見つからない場合は、null が返されます。

(そして、上記の例外に注意してください):

SecurityExceptionユーザーには、レジストリ キーを読み取るために必要なアクセス許可がありません。

そのため、Windows Installer サービスによって実行されているときに、インストール シーケンス中にアクションが呼び出されている可能性があります。このサービスは、ログインしているユーザーのアカウントではなく、ローカル システム アカウントで実行されます。


このキーで何を達成しようとしているのかわからないため、どの回避策を提案すればよいかわかりません。MSI システム内の標準の組み込み機能を使用して目的を達成できる場合や、プログラムを初めて実際に実行するまでこのアクションを延期したい場合があります。

(MSI 内で可能なことは、ビルドに使用しているものによって異なる場合があります。現在 VS セットアップ プロジェクトを使用している場合は、かなり制限されます)

于 2012-07-11T07:15:49.520 に答える
1

HKCU ハイブではなく、HKLM で同じパスのレジストリ キーを探します。AutoCAD が「現在のユーザー用」ではなく「すべてのユーザー用」にインストールされている場合にのみ存在しますが、前者は非常に可能性が高いです。

AutoCAD が特定のユーザー専用にインストールされていて、同じユーザーの下に別のものをインストールしている場合はmsidbCustomActionTypeNoImpersonate、カスタム アクションのフラグを調べます。デフォルト値は false ですが、そのフラグを true に変更した場合、Damien_The_Unbeliever による姉妹の回答で既に説明されている問題があります。

AutoCAD が特定のユーザー用にのみインストールされ、別のユーザー (管理者など) の下に別のものをインストールする場合は、要件のどこかに論理的なギャップがないか注意してください。HKCU ハイブは 1 つのシステム全体のハイブではありませんが、その内容はログインしているユーザーごとに異なります。レジストリの内容が異なる複数の AutoCAD インストールが並行してインストールされている可能性があり、それぞれで本当に何をしたいのかを明確にする必要があります。または、別のアプローチで最終的な目標に到達します。

于 2012-07-11T08:27:25.377 に答える