none
UACレベルの違いによって、CLSIDFromProgIDの結果が異なる

    質問

  • Windows10 にて Win32のデスクトップアプリ(Visual Studio 2017)で、

    リンカー マニフェストファイル UACレベル asInvoker だと
    hr = CLSIDFromProgID("Excel.Application", &clsid);
    の結果は、hr = S_OK で
    正常に clsid に {00024500-0000-0000-C000-000000000046} が 取得される。


    リンカー マニフェストファイル UACレベル requireAdministrator だと
    hr = CLSIDFromProgID("Excel.Application", &clsid); 
    の結果は、hr = CO_E_CLASSSTRING で
    clsid は {00000000-0000-0000-0000-000000000000} となる。

    つい最近まで、Windows8.1を使用しており、requireAdministrator で、問題はありませんでした。

    Windows10 Office Personal 2016 の 新PCに変えたところ、発生しました。
    Excelの環境の問題かもしれません。

    ちなみに、Office2016 はプレインストールで、Windows Storeからセットアップするようになっており、
    インストールディレクトリなど、これまでの環境とはだいぶ違いを感じています。

    2018年11月2日 3:55

すべての返信

  • Shashuric さん、こんにちは。フォーラム オペレーターの立花です。
    MSDN フォーラムへご投稿くださいましてありがとうございます。

    Visual C++ フォーラムの方が情報が寄せられやすいと思いましたので
    移動させていただきました。

    もし言語が違っておりましたらご指摘ください。


    参考になった投稿には回答としてマークの設定にご協力ください
    MSDN/TechNet Community Support 立花楓

    2018年11月2日 4:04
    モデレータ
  • あまり詳しくないのでは回答ではありません。

    ストアからインストールする、UWP 方式の Office は Packaged COM になっているはずです。
    マシン全体の COM として登録するのではなく、ユーザー単位に分離された COM になります。

    ユーザー権限でインストールできる仕組みであるので、その COM が偽物(悪意あるプログラム)に置換されていたら、管理者権限で動かすアプリが不正な COM をつかまされるかもしれません。
    そういう意味(セキュリティ観点)でも動かないのはそういうものかな…? という印象はあります。(単なる仕様制限の可能性もありますが…)

    1つ言えることがあるとしたら、管理者権限を要求するアプリは設計を見直した方が良いということでしょうか。
    近年のプリインストール Office はストアからインストールするものになってきていますので、現在遭遇されている問題を考えると、管理者権限で Excel を COM ベースで使うのは通じない(できない)可能性が高そうなので…。


    -----
    自分一人の環境だけの話であれば、デスクトップ版に乗り換えれば良いだけだとは思います。
    https://www.microsoft.com/ja-jp/office/setup/2016pipc/faq.aspx
    「Microsoft ストア アプリ版 Office 2016 から、デスクトップ アプリ版 Office 2016 に入れ替えることはできますか」
    2018年11月2日 14:21
    モデレータ
  • 自分一人の環境だけではないので、ストアアプリ版で環境が異なるなら、現実的に、それにも対応が必要な状況です。

    現在、以下のように対処しております。

    hr = CLSIDFromProgID(OLESTR("Excel.Application"), &clsid);
    if(FAILED(hr))
    {
     CLSIDFromString(OLESTR("{00024500-0000-0000-C000-000000000046}"), &clsid);
    }

    クラスIDが得られますと CoCreateInstance および その後の処理では問題なく動作します。

    今後は、requireAdministratorを適用しない方向で検討します。

    デスクトップ版への乗り換えもできるわけですね、貴重なご指摘ありがあとうございました。

    2018年11月2日 22:08