0

我想创建一个设置来部署软件。我的第一个安装窗口是检查该计算机中是否安装了主软件(其他软件),因为我需要在主软件的安装文件夹中添加一个支持文件。

在 Visual Studio 设置部署项目中这可能吗?

4

2 回答 2

1

下面的代码对我来说工作正常

    /// <summary>
    /// To check software installed or not
    /// </summary>
    /// <param name="controlPanelDisplayName">Display name of software from control panel</param>
    private static bool IsApplictionInstalled(string controlPanelDisplayName)
    {
        string displayName;
        RegistryKey key;

        // search in: CurrentUser
        key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
        if (null != key)
        {
            foreach (string keyName in key.GetSubKeyNames())
            {
                RegistryKey subkey = key.OpenSubKey(keyName);
                displayName = subkey.GetValue("DisplayName") as string;
                if (controlPanelDisplayName.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
                {
                    return true;
                }
            }
        }

        // search in: LocalMachine_32
        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
        if (null != key)
        {
            foreach (string keyName in key.GetSubKeyNames())
            {
                RegistryKey subkey = key.OpenSubKey(keyName);
                displayName = subkey.GetValue("DisplayName") as string;
                if (controlPanelDisplayName.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
                {
                    return true;
                }
            }
        }
        // search in: LocalMachine_64
        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall");
        if (null != key)
        {
            foreach (string keyName in key.GetSubKeyNames())
            {
                RegistryKey subkey = key.OpenSubKey(keyName);
                displayName = subkey.GetValue("DisplayName") as string;
                if (controlPanelDisplayName.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
                {
                    return true;
                }
            }
        }
        // NOT FOUND
        return false;
    }
于 2013-12-05T06:07:53.037 回答
1

您安装的每个软件都必须在注册表中创建条目。因此您可以从 Visual Studio 安装项目中读取注册表中的特定条目。

从注册表中检索值

如何从注册表中检索您计算机的MediaPath值,

您的计算机的 MediaPath 值位于以下注册表子项下: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 您可以使用启动条件检索此值。为此,请按照下列步骤操作:

  • 在 Visual Studio .NET 中,指向视图菜单上的编辑器,然后单击启动条件。
  • 在启动条件编辑器中,单击搜索目标机器。
  • 在操作菜单上,单击添加注册表搜索。

默认情况下,会添加 Search for RegistryEntry1。

  • 在“查看”菜单上,单击“属性窗口”以选择您在上一步中创建的注册表搜索的“属性”窗口。
  • 将 Name 属性值更改为 Search for MediaPath。
  • 将 Property 属性值更改为 MEDIA_PATH。

当您运行安装项目时,MediaPath 注册表值被检索到您的 MEDIA_PATH 属性。

  • 要在注册表中搜索 HKEY_LOCAL_MACHINE,请单击 Root 属性,然后在属性值的下拉列表框中单击 vsdrrHKLM。
  • 要搜索 SOFTWARE\Microsoft\Windows\CurrentVersion 子项,请在 RegKey 属性值文本框中键入 SOFTWARE\Microsoft\Windows\CurrentVersion。
  • 要搜索 MediaPath 值,请在 Value 属性值文本框中键入 MediaPath。

更多见野兔

于 2013-11-07T06:44:52.027 回答