4

アウト プロセス COM サーバーであるレガシー Delphi 6 アプリケーションのセットがあります。これらのプログラムを Windows で通常のドメイン ユーザーとして実行しようとすると、HKEY_CURRENT_CLASSES のチャンクを更新しようとして (コマンド ライン引数やスイッチを使用せずに) 実行すると、プログラムが表示されます。これは、HKCR ハイブへのアクセス許可がないために失敗します。Delphi 6 COM サーバーを実行すると、組み込みの COM タイプをシステム レジストリに登録しようとするようです。

通常、この動作は望ましくありません。これは、COM レジストリを初期化するために、管理者アカウントでのインストール中に 1 回実行しますが、非管理者アカウントの通常の実行条件下では実行したくありません。(sys internals プロセス モニターを使用してシステムを監視すると、失敗したレジストリ キー アクセス試行を確認できます)。

この自動 COM 登録ロジックを防ぐために、Delphi 6 COM サーバーに渡すことができるコマンド ライン スイッチはありますか?

4

2 に答える 2

4

It will always try to register the server from TComServer.Initialize unless the startup parameter is /UNREGSERVER which will remove the registry settings. If the startup parameter is /REGSERVER you will get an exception if the registration failed otherwise it will just swallow the exception. Automatic registration of out-proc COM servers has been removed in later version of Delphi. The only option you have to remove this behavior in Delphi 6 is to modify TComServer.Inititalize to only register the server when FStartMode is smRegServer or smUnregServer.

于 2011-04-11T18:01:12.477 に答える
4

あなたは自分が思っていることを実際に見ていないと思います...

Delphi は、COM サーバーがまだインストールされていない場合にのみインストールを試みます。あなたが見ているのは、アプリケーションがまだ登録されているかどうかを確認していると思われます。エラーが表示される理由は、Delphi 6 ではレジストリ キーが ALL_ACCESS 権限で開かれていたためです (D6 は XP/Vista/Win7 より前でした)。

ただし、あなたの質問への回答: いいえ、自動登録ロジックを防止するコマンド ライン スイッチはありません。

于 2011-04-11T16:43:01.313 に答える