如何确定我的域计算机上是否安装了特定的应用程序

时间:2013-03-12 17:32:05

标签: c# installation

如何使用C#确定我的域计算机上是否安装了特定的应用程序?

忘了提。我拥有域名管理员权限

我无法回答人们的问题......所以我一直在编辑我的帖子。 ..该应用程序在“控制面板”中的“添加/删除”下注册

1 个答案:

答案 0 :(得分:0)

由于您的应用程序实际存储在您的控制面板中,这意味着它正在生成注册表项。因为它为msiexec实用程序生成密钥。您的申请信息将在此处:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

这意味着,您的注册表将包含以下类别的信息:

  • 显示名称
  • UninstallString
  • 出版商

它包括更多,除了这三个将是最可行的。

  • 显示名称:应包含您的产品名称。
  • UninstallString:这将包含您的产品GUID
  • 发布者:是公司名称。

因此,您可以实际实现一些基本的远程处理,让服务器强制用户运行将运行您的应用程序的.bat等。

但其中一个关键值是,您可以在注册表中执行一个简单的循环,以确定它是否已安装。

这是tutorial

为了进行迭代,您需要执行以下操作:

// 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,这样一旦用户登录,它会检查它是否已安装并运行您的应用程序。

您可以使用远程处理,为了远程运行应用程序,有很多变化。你必须找到最适合你的东西。希望这会对你有所帮助。

为了解释一下上面的代码片段,在我的实现中,本地机器将启动应用程序。它会在诊断阶段运行,以尝试修复遇到的常见错误。计算大量应用程序的最简单方法是将我们的数据库链接到存储所有产品Guids的数据库。

所以你的要求非常非常可能。这应该可以解决问题,并指出你需要去哪里实际实现它。