COCCOCREATEINSTANCEEXは、どのようにしてタイプをロードしようとしますか(ADMIN以外のWINユーザーの場合)?

StackOverflow https://stackoverflow.com/questions/4595190

  •  15-10-2019
  •  | 
  •  

質問

Admin以外のWindowsユーザーのみで発生する非常に複雑な問題があります。

デスクトップにあるスクリプトSを実行し、C ++ DLLの関数を呼び出します。その後、フローは次のとおりです。

  1. 私のC ++ DLLはDelphiプロセスを作成し、パラメーターとしてGUIDを送信します。
  2. 初期化時に、私のDelphiプロセスは、COMオブジェクト工場を使用して、指定されたGUIDでクラスCを登録します。
  3. 私のC ++ DLLは、同じGUIDでCocreateinStanceExを呼び出そうとします。 ==> hresult 0x80029c4aエラーの読み込みタイプライブラリ/dllで操作が失敗します。

Delphi側から例外が投げかけられていません - 登録はスムーズに機能しているようです。

私はプロセスモニターを使用し、驚いたことに、CocreateinStanceExが呼び出されると、間違った場所からDelphi exeファイルを読み取ろうとする試みがあることがわかりました。 exeが登録されている場所にアクセスしようとする代わりに、スクリプトが存在するデスクトップからEXEにアクセスしようとする試みがあります。もちろんEXEはありません。

これは、ADMIN以外のユーザーにのみ発生します。また、管理者ユーザーが以前にこのスクリプトを実行したことがある場合、それは非勤務に対して完全に正常に実行されます。

私は今、なぜこれが起こっているのかを理解しようとしています。これが、CocreateinStanceExの流れを理解しようとする理由です。ウェブ上に有用な情報が見つかりませんでした。では、CocreateinStanceExはどのようにタイプをロードしようとしますか?どこを見ようとしていますか?説明されている状況がどのように発生するかについては何か考えがありますか?

情報やアイデアは非常に高く評価されます!

役に立ちましたか?

解決

Delphiプロセスのexeは、フルパスの代わりに相対パスに登録されていることがわかりました。

管理者が正しく機能した理由はまだわかりません...だから誰かがアイデアを持っているなら、私は聞きたいと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top