7

DCOM アプリケーションの起動 ID に関する情報をプログラムで取得する方法はありますか。私が何を意味するかを理解するために添付の写真を見てください。

DCOM Config からのアプリケーション プロパティのスクリーンショット

WMIを使ってみた

ManagementObjectSearcher s = new ManagementObjectSearcher(new ManagementScope(@"\\.\root\cimv2"), new ObjectQuery(
                "select * from Win32_DCOMApplicationSetting  where AppID='{048EB43E-2059-422F-95E0-557DA96038AF}'"))
ManagementObjectCollection dcomSett = s.Get();
var value = dcomSett.Cast<ManagementObject>().ToArray()
             [0].Properties["RunAsUser"].Value;

しかし、「RunAsUser」プロパティは空でした。Interop.COMAdmin も試してみました

COMAdmin.COMAdminCatalogClass catalog = (COMAdmin.COMAdminCatalogClass)new COMAdmin.COMAdminCatalog();
(COMAdmin.COMAdminCatalogCollection)catalog.GetCollection("Applications")

このようにして、MMC の「コンポーネント サービス」スナップインの「COM+ アプリケーション」ノードの下にリストされているアプリケーションを取得することができました。

COM+ アプリケーション

私は COM、DCOM、COM+ の初心者で、何か重要なことを見逃していると確信しています。

しばらくすると、最初のアプローチ (ManagementObject) で NULL を取得していた理由がわかりました。受け取るもの:

  • ID が現在起動ユーザーに設定されている場合は NULL
  • 「対話ユーザー」の場合は「対話ユーザー」
  • 3 番目のオプションの場合のユーザー名を含む文字列 (最初の図を参照)

しかし、それでも、MMCのDCOM 構成ノードの下にあるMicrosoft PowerPoint スライドなどのアイテムの ID を変更する方法が必要です。

4

4 に答える 4

0

これは非常に簡単です。APPId は次の場所から取得できます。

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{048EB43E-2059-422F-95E0-557DA96038AF}

使用して

(RegistryKey dcomPPTIdentity = Registry.LocalMachine.OpenSubKey("Software\\Classes\\AppID\\{048EB43E-2059-422F-95E0-557DA96038AF}"))
{
    if (dcomPPTIdentity != null)
    {
         Registry.SetValue(dcomPPTIdentity.ToString(), "RunAs", "userName");
    }
}
于 2020-04-28T11:18:25.000 に答える