3

EXE、ActiveX コントロール (DLL)、および COM サーバー (EXE) を含む Win32 アプリケーションがあり、Inno Setup 5 を使用してインストーラーをビルドしています。私たちの顧客の多くは、ユーザーが管理者権限を持たない制限付きユーザー アカウントを使用しています。また、COM コンポーネントを登録する必要があるため (HKEY_CLASSES_ROOT に書き込みます)、私のセットアップ ファイルは昇格された (管理者) 権限で実行する必要があります。これはやむを得ないと思います(残念ながら、私はEXE COMサーバーを持っているため、登録不要のCOMを使用できません)。ただし、制限付きユーザーとして実行できる更新インストーラーを作成したいと考えており、アドバイスを求めています。

私が考えていることは次のとおりです。

  • 初期セットアップ (初回インストール) では、%PROGRAMFILES% ではなく、%ALLUSERSPROFILE%\Application Data\CompanyName\AppName にアプリケーションがインストールされます。COM コンポーネントは通常どおり登録されます (まだ存在しないため)。
  • その後の更新 (別の Inno Setup スクリプトを使用) では、新しいファイルが %ALLUSERSPROFILE%\Application Data\CompanyName\AppName に単純にコピーされます。制限付きユーザーでもこのフォルダーへの書き込みアクセスが可能であり、COM コンポーネントが既に登録されているため、管理者アクセスは必要ありません。

これは、顧客が管理者アカウントを使用する手間をかけずに、最新かつ最高のバージョンにアップグレードできることを意味します。これは受け入れられますか、それともお尻を噛む可能性がありますか? Google Chromeでも同様のことができると確信していますが、COMコンポーネントがないため(私が知る限り)、初期設定でも制限付きユーザーになる可能性があります.

この問題に直面した他の人からのアドバイスは大歓迎です。

4

4 に答える 4

4

OK、COM サーバーと COM オブジェクトの両方をユーザーごとに登録して、制限付きユーザーのインストール スクリプトを作成する方法を見つけました。

MSVC 2008 に同梱されている最新バージョンの ATL (v9) を使用して、COM サーバーと COM オブジェクトを作成しています。新しい/RegServerPerUserスイッチを介してユーザーごとに COM サーバーを登録できることが判明しました。XP、Vista、および Windows 7 の限られたユーザー アカウントでこれをテストしたところ、完全に動作しました。

次に、COM コントロールです。繰り返しますが、ATL9 が助けてくれます。RegSvr32がコントロールの関数を呼び出すことを確認しDllInstall、コマンド ライン パラメーターに を渡すことで、ユーザーごとにコントロールを登録できますuser。したがって、この方法でコントロールを登録するには、次のようにします。

regsvr32.exe /i:user /n MyControl.DLL

繰り返しますが、これを XP、Vista、および Windows 7 でテストしたところ、問題なく動作しました。

次に、Inno Setup スクリプトに次の変更を加えました。

  • ユーザーが管理者権限を持っている場合、デフォルトのインストール フォルダは{pf}(C:\Program Files) になります。そうでない場合、デフォルトは{commonappdata}(C:\Documents and Settings\All Users) になります。
  • /RegServerPerUser新しいスイッチを使用して COM サーバーを登録します。
  • COM オブジェクトからフラグを削除し、regserver代わりに、新しい「ユーザー」スイッチを使用して regsvr32 を呼び出すサポートを追加しました。

これらの変更はすべて、Inno Setup{code}機能を使用して簡単に行うことができます。

ユーザーごとの COM インストール パスを設定してくれた Kim に感謝します。

于 2009-09-21T06:53:57.370 に答える
2

確かなことはわかりませんが、COM サーバーがユーザーごとのインストールをサポートしていることを思い出すようです。おそらく EXE サーバーも同様です。

HKEY_CURRENT_USER\Software\Classesその場合は、登録コードをの代わりに に情報を書き込むように変更してくださいHKEY_CLASSES_ROOT

COM インフラストラクチャは、最初にユーザーごと、次にマシンごとにルックアップを行う必要があります。

とにかく実験する価値があります。

于 2009-09-17T19:39:29.120 に答える
0

アプローチを再考する必要があります...同じユーザーによるプログラムの実行も許可できるフォルダーへの書き込みアクセスは、すべてのウイルス/マルウェア機能の99%の原因です。ソフトウェア制限ポリシーと Windows 7 に組み込まれた新しい App Locker の動作について少し学んでください。これにより、コンピューティング インフラストラクチャが後退するのではなく、前進できるようになります。

于 2011-10-31T14:44:15.643 に答える