0

C# を使用して、ドメイン コンピューターに特定のアプリケーションがインストールされているかどうかを確認する方法は?

言及するのを忘れました。ドメインの管理者権限を持っています

人々の質問に答えることができないので、投稿を編集し続けます。.. コントロール パネルの [追加と削除] にアプリケーションが登録されている

4

1 に答える 1

0

アプリケーションは実際にはコントロール パネル内に保存されているため、レジストリ キーを生成していることになります。msiexecユーティリティのキーを生成するためです。あなたのアプリケーション情報はここにあります:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

つまり、レジストリには次のカテゴリの情報が含まれます。

  • 表示名
  • アンインストール文字列
  • 出版社

これら3つが最も実行可能であることを除いて、それにはさらに多くのものが含まれています.

  • 表示名: 製品名を含める必要があります。
  • UninstallString: 製品の GUID が含まれます。
  • 発行元:会社名です。

したがって、実際にいくつかの基本的なリモーティングを実装し.batたり、アプリケーションを実行するサーバーをユーザーに強制的に実行させたりすることができます。

しかし、重要な価値の 1 つは、レジストリ内で単純なループを実行して、インストールされているかどうかを判断できることです。

ここにチュートリアルがあります。

反復するには、次のようなことを行う必要があります。

// Registry 'MSIEXEC Guid'
public void RegistryFix()
{            
    // Create a Registry Instance.
    RegistryKey rKey = Registry.LocalMachine.OpenSubKey(@"\\SOFTWARE\\Microsoft
        \\Windows\\CurrentVersion\\Uninstall", true);

    // Loop Our Instance:
    foreach( string sub in rKey.GetSubKeyNames() )
    {

         #region Error Handling for 'Registry MSIEXEC'

         try
         {
             // Locate Boulevard Instance
             RegistryKey blvd = rKey.OpenSubKey(@"\\SOFTWARE\\Microsoft
                 \\Windows\\CurrentVersion\\Uninstall\\" + sub);

              // Specify Boulevard Display Name String
              string blvdDisplay = blvd.GetValue("DisplayName").ToString();

              // Search For:
              if (blvdDisplay.Contains("Boulevard"))
              {

                    // Now Obtain Uninstall String.
                    string blvdUninstall =   blvd.GetValue("UninstallString").ToString().Replace(@"/u", @"/f");

                     // Execute
                     Process u = Process.Start(blvdUninstall);
                     u.WaitForExit();

               }
           }
           #endregion

         // Unhandled / Null Error
         catch
        {                    
               // Write Exception:
               Console.WriteLine("Null Value Detected");
               throw new Exception("Invalid or Null Registry Value Detected.");
        } 
   }                         
}

したがって、上記の例では、再帰ループを実行し、それらのサブキーを検索msiexecして、修復を開始できるようにしています。そのため、実際にそれを行うためのすべてのコードを投稿したわけではありませんが、要点は、ニーズに最適なものを選択できるように、これらのレジストリ キーを検索する方法を示すことでした。

現在、これはローカルで実行するように設計されているため、実行可能ファイルを作成してから作成する必要がある場合があるlogon.batため、ユーザーがログインすると、インストールされているかどうかを確認してアプリケーションを実行します。

アプリケーションをリモートで実行するには、さまざまなバリエーションがあります。あなたに最適なものを見つける必要があります。うまくいけば、これはあなたを助けます。

上記のコード フラグメントについて少し説明すると、私の実装ではローカル マシンがアプリケーションを起動します。診断フェーズを実行して、発生した一般的なエラーの修正を試みます。多数のアプリケーションを計算する最も簡単な方法は、すべての製品 Guid を格納するデータベースにリンクすることでした。

したがって、あなたの要求は非常に可能です。これで問題が解決し、実際に実装するためにどこに行く必要があるかがわかります。

于 2013-03-12T19:02:42.557 に答える