繁体   English   中英

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

[英]How to determine whether a specific application is installed on my domain computers

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

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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

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

  • 显示名称
  • 卸载字符串
  • 发行人

它包括很多,除了那三个是最可行的。

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

因此,您实际上可以实现一些基本的远程处理,让服务器强制用户运行将运行您的应用程序的.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,为了远程运行应用程序,有很多变体。 您必须找到最适合您的东西。 希望这对您有帮助。

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

因此,您的请求非常有可能。 这应该可以解决问题,并指出您还需要实际实施该方法的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM