質問者
WindowsVISTAでIShellWindowsのCreateInstanceが失敗してしまう

質問
-
現在自作のブラウザヘルパオブジェクトの中でIShellWindowsのCreateInstanceを行なっていますが、IEを管理者として実行しないと失敗してしまいます。
管理者として実行もしくはUACを無効にすると成功します。
WindowsVistaでは管理者として実行したアプリケーションの中でしかIShellWindowsのCreateInstanceは出来ないのでしょうか?
どうしても、IShellWindowsのCreateInstanceを行ないたい場合は、管理者として実行もしくはUACを無効にするしか解決方法は無いのでしょうか?
以下はCreateInstanceしている個所のコードです。
SHDocVw::IShellWindowsPtr spShellWindows;
spShellWindows.CreateInstance(__uuidof(SHDocVw::ShellWindows));(失敗し、spShellWindowsはNULLになる)
何か情報があれば宜しくお願いいたします。
すべての返信
-
The COM Elevation Monikerが参考になると思います。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/html/1595ebb8-65af-4609-b3e7-a21209e64391.aspmanifestを使う方が簡単です。
アイコンに、シールドマークが自動的に付加されてしまいます。ただし、注意事項もあるようなので、実行環境にはご注意を。 -
まずは、先のURLでRequirementsを見てみてください。
システム(OS)で提供されているCOMのほとんどがElevationがDisabledになっていると思います。
そのため、CO_E_ELEVATION_DISABLEDで復帰することになると思います。
もし対象としているCOMのElevationがDisabledになっている場合には、自分で昇格可能(Enabled)なCOMを作成し、それを経由するしかないかもしれません。
これだと面倒なので、もう少し簡単なのは、埋め込みのmanifestでコントロールすることでしょう。
これだとコードに手を加える必要がありません(manifestを書き換える必要がありますが)。