【问题标题】:MSI installer All User : Set value for SCRNSAVE.EXEMSI 安装程序所有用户:设置 SCRNSAVE.EXE 的值
【发布时间】:2022-01-15 12:48:00
【问题描述】:

在我的带有 MSI Installer 的 WPF 程序中,我需要设置 HKCU\SCRNSAVE.EXE(以及 ScreenSaveTimeOut、ScreenSaveActive 和 ScreenSaverIsSecure)注册表项。

问题是当我尝试通过我的 MSI 安装程序项目(设置为所有用户)在注册表中插入所有这些密钥时,我的安装程序没有创建密钥。

我已经尝试在 HKLM 上安装此密钥,但配置不适用于 Windows。

有没有办法做到这一点?

谢谢你:)

【问题讨论】:

  • 问题不一样,在我的情况下,问题是由所有用户安装引起的。使用此选项,安装程序无法访问 HKCU 注册表项 :( 我通过在程序启动时添加密钥找到了解决方案,但是当我使用安装程序启动程序时(安装后),它始终处于管理员模式,而不是也可以。只有在用户手动启动程序时才有效
  • 您需要查看 Active Setup 或为您的应用程序创建广告快捷方式并以这种方式编写 HKCU。在任何情况下,您都不应该编写像 HKCU\SCRNSAVE.EXE 这样的注册表值?
  • @JordanFavray 您描述的结果实际上听起来像是最佳实践。安装程序只处理复制以及要复制的内容并将其留给应用程序以在第一次运行时设置配置要好得多。它将迫使您开发具有弹性的程序并减轻安装程序的作用。
  • 我的应用程序是一个带有系统托盘应用程序的屏幕保护程序 ;-) 这就是为什么我需要写入 HKCU\SCRNSAVE.EXE

标签: c# wpf windows-installer


【解决方案1】:

找到了解决办法!

我循环进入 HKEY_USERS 以根据需要添加我的注册表项 :)

RegistryKey lUsersKey = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64);

foreach (string lUsersSubKey in lUsersKey.GetSubKeyNames())
{
    try
    {
        RegistryKey lDesktopKey = lUsersKey.OpenSubKey(lUsersSubKey, true).CreateSubKey("Control Panel\\Desktop", true);
        lDesktopKey.SetValue("SCRNSAVE.EXE", myScrPath);
    }
    catch
    {
        continue;
    }
}

【讨论】:

  • 嗯。这仅适用于已经登录机器的用户,不是吗?您可能仍然应该为后续登录的用户查看 Active Setup....
  • 也为新用户工作,因为密钥也设置了 HKU/Default 所以新用户也将拥有这个密钥
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
相关资源
最近更新 更多