我想创建一个部署软件的设置。我的第一个安装窗口是检查该计算机中安装的主软件(其他软件),因为我需要在主软件的安装文件夹中添加一个支持文件。
在Visual Studio设置部署项目中可以实现吗?
答案 0 :(得分:1)
您安装的每个软件都必须在Registry中创建条目。您可以从Visual Studio安装项目中读取注册表中的特定条目。
从注册表中检索值
如何从中检索计算机的 MediaPath 值 注册表,
计算机的MediaPath值位于以下注册表子项下: HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion 您可以使用启动条件检索此值。为此,请按照下列步骤操作:
默认情况下,会添加“搜索RegistryEntry1”。
运行安装项目时,将检索MediaPath注册表值 MEDIA_PATH属性。
更多See Hare
答案 1 :(得分: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;
}