MSI 安装程序所有用户:设置 SCRNSAVE.EXE 的值

Posted

技术标签:

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

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

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

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

有没有办法做到这一点?

谢谢你:)

【问题讨论】:

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

以上是关于MSI 安装程序所有用户:设置 SCRNSAVE.EXE 的值的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 wix msi 以运行管理员广告

MSI 安装程序未正确卸载产品

win 10 安装.msi 程序出现the error code is 2503

向 app.config 添加了新的应用程序设置,但 MSI 不会安装它(不会覆盖)

如何使用 WiX 和 MSI 进行静默安装和卸载?

是否不可能制作 perMachine 而不是 perUser 的电子应用 MSI 安装程序?