COMでexecutbaleのインストール済みアプリケーションパスを取得する方法

CrazyCoder

COMを使用してすべてのアプリケーションのインストール場所を取得しようとしています。各アプリケーションの表示名を取得できます。しかし、各アプリケーションのインストールパスを取得できません。

私のコード:

CComPtr<IShellItem> spPrinters;
        CoInitialize(nullptr);
        HRESULT hresult = ::SHCreateItemFromParsingName(L"::{26EE0668-A00A-44D7-9371-BEB064C98683}\\8\\"
            L"::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}", nullptr, IID_PPV_ARGS(&spPrinters));
        CComPtr<IEnumShellItems> spEnum;
        spPrinters->BindToHandler(nullptr, BHID_EnumItems, IID_PPV_ARGS(&spEnum));
        for (CComPtr<IShellItem> spProgram; spEnum->Next(1, &spProgram, nullptr) == S_OK; spProgram.Release())
        {
            CComHeapPtr<wchar_t> spszName;
            spProgram->GetDisplayName(SIGDN_NORMALDISPLAY, &spszName);
            CString cDisplayName = spszName;
}

IEnumShellItemsからインストールパスを取得する方法についてのアイデア。

事前に感謝します。

サイモン・モリアー

これをダンプするコードを次に示します。子のIPropertyStoreはこれらを返しません。理由はわかりません。そのため、特別な列ID(PROPERTYKEYと同じ)を持つ古い IShellFolder2 :: GetDetailsExメ​​ソッドを使用する必要があります

CComPtr<IShellItem> cpl;
CComPtr<IShellFolder2> folder;
CComPtr<IEnumShellItems> enumerator;
PROPERTYKEY pkLocation;
SHCreateItemFromParsingName(L"::{26EE0668-A00A-44D7-9371-BEB064C98683}\\8\\::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}", nullptr, IID_PPV_ARGS(&cpl));

// bind to IShellFolder
cpl->BindToHandler(NULL, BHID_SFObject, IID_PPV_ARGS(&folder));

// bind to IEnumShellItems
cpl->BindToHandler(NULL, BHID_EnumItems, IID_PPV_ARGS(&enumerator));

// get this property key's value
PSGetPropertyKeyFromName(L"System.Software.InstallLocation", &pkLocation);

for (CComPtr<IShellItem> child; enumerator->Next(1, &child, nullptr) == S_OK; child.Release())
{
    // get child's display name
    CComHeapPtr<wchar_t> name;
    child->GetDisplayName(SIGDN_NORMALDISPLAY, &name);
    wprintf(L"%s\n", name);

    // get child's PIDL
    CComHeapPtr<ITEMIDLIST> pidl;
    SHGetIDListFromObject(child, &pidl);

    // the PIDL is absolute, we need the relative one (the last itemId in the list)
    // get it's install location
    CComVariant v;
    if (SUCCEEDED(folder->GetDetailsEx(ILFindLastID(pidl), &pkLocation, &v)))
    {
        // it's a VT_BSTR
        wprintf(L" %s\n", v.bstrVal);
    }
}

文書化されていないSystem.Software.InstallLocationPROPERTYKEYを使用していることに注意してくださいそれを見つけるために、私は各子に対して次のようなコードですべての列をダンプしました:

    int iCol = 0;
    do
    {
        SHCOLUMNID colId;
        if (FAILED(folder->MapColumnToSCID(iCol, &colId)))
            break; // last column

        CComHeapPtr<wchar_t> name;
        PSGetNameFromPropertyKey(colId, &name);

        CComVariant v;
        if (SUCCEEDED(folder->GetDetailsEx(ILFindLastID(pidl), &colId, &v)))
        {
            if (v.vt == VT_BSTR)
            {
                wprintf(L" %s: %s\n", name, v.bstrVal);
            }
            else
            {
                wprintf(L" %s vt: %i\n", name, v.vt);
            }
        }

        iCol++;
    } while (true);
}

PS:エラーチェックはあまり追加していませんが、追加する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Visual Studio2012からインストール済みアプリケーションのフォルダーパスを取得する方法

分類Dev

XULRunnerアプリケーションのインストールパスをJavaScriptコードで取得する方法

分類Dev

Androidでシステムプリインストールアプリケーションのパッケージ名を取得する方法

分類Dev

CloudSQLインスタンスで承認済みAppEngineアプリケーションを設定する方法

分類Dev

Google Analytics API:「サービスアプリケーション」と「インストール済みアプリケーション」の違いは何ですか

分類Dev

選択したインストール済みアプリケーションをグリッドビューで表示する方法

分類Dev

システム全体のバックアップからインストール済みパッケージのリストを生成する方法は?

分類Dev

Mac OS Xのインストーラーパッケージデータベースからインストール済みアプリケーションを削除するにはどうすればよいですか?

分類Dev

非JDK /非JREインストール済みシステムでJavaアプリケーションを実行する際の問題

分類Dev

インストール済みとしてアプリケーションを登録する

分類Dev

Ubuntuでアプリケーションを「インストール済み」として分類するものは何ですか?

分類Dev

Flaskアプリケーションのルートパスを取得する

分類Dev

AOSPでビルド済みアプリケーション(ソースコードなし)に追加のアクセス許可を追加する方法

分類Dev

COM +アプリケーションリストを取得する

分類Dev

使用済みのgemsetとそのrailsアプリケーションのパスを見つける方法は?

分類Dev

アプリでアプリケーションのインストールに失敗したイベントを取得する方法

分類Dev

私のWebページから(PCで)特定のインストール済みアプリケーションを開きます

分類Dev

所有権の詳細を含むインストール済みアプリケーションを表示するために linux cmd を実行します

分類Dev

c#コンソールアプリケーションを使用してごみ箱内のファイルのリストを取得する方法

分類Dev

Xamarin Android:アイコン付きのインストール済みアプリリストを取得する

分類Dev

AndroidJavaでアプリケーションのアンインストールを検出する方法

分類Dev

アンインストール アプリケーションのパスを名前の問題で取得する

分類Dev

アプリケーションをアンインストールする方法

分類Dev

SCCM WQLクエリ-特定のインストール済みアプリケーションのバージョンを一覧表示しますか?

分類Dev

Windows10ユニバーサルアプリケーションでペアリングされたBluetoothデバイスのリストを取得する方法

分類Dev

Symfony4コンソールコマンドでアプリケーションのルートパスを取得する方法

分類Dev

DebianでPythonコンパイル済みアプリをアンインストールする

分類Dev

ubuntu 18.04から20.04にアップグレードすると、インストール済みのアプリケーションは失われますか?

分類Dev

ubuntu 18.04から20.04にアップグレードすると、インストール済みのアプリケーションは失われますか?

Related 関連記事

  1. 1

    Visual Studio2012からインストール済みアプリケーションのフォルダーパスを取得する方法

  2. 2

    XULRunnerアプリケーションのインストールパスをJavaScriptコードで取得する方法

  3. 3

    Androidでシステムプリインストールアプリケーションのパッケージ名を取得する方法

  4. 4

    CloudSQLインスタンスで承認済みAppEngineアプリケーションを設定する方法

  5. 5

    Google Analytics API:「サービスアプリケーション」と「インストール済みアプリケーション」の違いは何ですか

  6. 6

    選択したインストール済みアプリケーションをグリッドビューで表示する方法

  7. 7

    システム全体のバックアップからインストール済みパッケージのリストを生成する方法は?

  8. 8

    Mac OS Xのインストーラーパッケージデータベースからインストール済みアプリケーションを削除するにはどうすればよいですか?

  9. 9

    非JDK /非JREインストール済みシステムでJavaアプリケーションを実行する際の問題

  10. 10

    インストール済みとしてアプリケーションを登録する

  11. 11

    Ubuntuでアプリケーションを「インストール済み」として分類するものは何ですか?

  12. 12

    Flaskアプリケーションのルートパスを取得する

  13. 13

    AOSPでビルド済みアプリケーション(ソースコードなし)に追加のアクセス許可を追加する方法

  14. 14

    COM +アプリケーションリストを取得する

  15. 15

    使用済みのgemsetとそのrailsアプリケーションのパスを見つける方法は?

  16. 16

    アプリでアプリケーションのインストールに失敗したイベントを取得する方法

  17. 17

    私のWebページから(PCで)特定のインストール済みアプリケーションを開きます

  18. 18

    所有権の詳細を含むインストール済みアプリケーションを表示するために linux cmd を実行します

  19. 19

    c#コンソールアプリケーションを使用してごみ箱内のファイルのリストを取得する方法

  20. 20

    Xamarin Android:アイコン付きのインストール済みアプリリストを取得する

  21. 21

    AndroidJavaでアプリケーションのアンインストールを検出する方法

  22. 22

    アンインストール アプリケーションのパスを名前の問題で取得する

  23. 23

    アプリケーションをアンインストールする方法

  24. 24

    SCCM WQLクエリ-特定のインストール済みアプリケーションのバージョンを一覧表示しますか?

  25. 25

    Windows10ユニバーサルアプリケーションでペアリングされたBluetoothデバイスのリストを取得する方法

  26. 26

    Symfony4コンソールコマンドでアプリケーションのルートパスを取得する方法

  27. 27

    DebianでPythonコンパイル済みアプリをアンインストールする

  28. 28

    ubuntu 18.04から20.04にアップグレードすると、インストール済みのアプリケーションは失われますか?

  29. 29

    ubuntu 18.04から20.04にアップグレードすると、インストール済みのアプリケーションは失われますか?

ホットタグ

アーカイブ