0

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

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

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

4

1 回答 1

0

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

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

  • 显示名称
  • 卸载字符串
  • 出版商

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

  • 显示名称:应包含您的产品名称。
  • UninstallString:这将包含您的产品 G​​UID
  • Publisher:是公司名称。

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

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

这是一个教程

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

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

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

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

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

于 2013-03-12T19:02:42.557 回答