【问题标题】:Best practice for Windows installers: admin, non-admin or both?Windows 安装程序的最佳实践:管理员、非管理员或两者兼而有之?
【发布时间】:2011-10-27 14:32:53
【问题描述】:

我的一个应用程序有一个 Windows 版本,我使用 NSIS 制作了一个安装程序,当前版本安装到“程序文件”中。

我知道它仅在安装程序以管理员身份运行时才有效,并且可能会给某些用户(企业 PC...)带来问题。

这种安装程序的 Windows 最佳做法是什么?强制用户成为管理员?提供在其他地方安装的选项?

(我是 UNIX/Mac 人,所以对于 Windows 应用程序并不真正了解福音)

这里是 NSIS 脚本,如果有人想看看的话:https://github.com/nickbnf/glogg/blob/master/glogg.nsi

【问题讨论】:

    标签: windows installation nsis


    【解决方案1】:

    默认选项应始终是按机器安装,即需要管理员访问权限,但如果您能够提供按用户安装,这是一个额外的好处,可能会使某些人的生活更轻松。

    在可行的情况下,最佳做法是提供两种版本:一种带有安装程序,另一种无需安装即可运行。后者称为portable application

    (尽管我已引起您的注意:代表各地的企业 IT,请确保您的安装程序包含有文档且经过测试的静默模式,以便我们可以自动安装软件。)

    【讨论】:

    • 有趣,所以我应该明确地将非管理员锁定在安装程序之外。除此之外,我喜欢提供可移植版本的想法(我相信带有 .exe 和几个 .dll 的简单 zip 就足够了,对吧?)。我想便携式应用程序也不应该将其配置存储在 %APPDATA% 中?
    • 通常可移植应用程序将其配置存储在与应用程序文件相同的目录或子目录中。当然,在传统应用程序中,这是一个非常糟糕的主意,但便携式应用程序的重点是每个用户都有自己的独立副本。 (当然,带有安装程序的版本仍应使用用户的应用程序数据文件夹。)
    【解决方案2】:

    在 Windows 中,通常认为需要管理员权限才能安装软件是一种很好的做法。企业实际上喜欢此功能,因为这意味着某些人将无法在未经公司许可的情况下安装软件。软件通常应进入 Program Files 或 Program Files (x86) 目录,并且有意需要管理员访问权限。

    这条规则有一些例外,但很少见。为了安全地为每个用户安装软件,您需要保证:

    1) 安装程序可以从 Program Files 以外的地方(或其他机器范围的位置)运行。

    2) 软件本身不会写入机器范围的位置。

    3) 您不会将任何内容写入机器范围的注册表位置(例如 HKEY_LOCALMACHINE)。

    老实说,这是一个更复杂的问题。这真的取决于你在做什么。如果您可以免于单击一次安装,那么这可能是最好的选择,并且您可以通过部分信任来做到这一点,这意味着您不必要求管理员访问权限,并且您基本上可以保证使用将是 per-用户。

    【讨论】:

    • 我不同意。不允许按用户安装只会给 IT 部门(即我!)增加额外的工作,并且实际上并没有提高安全性:按用户软件在用户的上下文中运行,因此它不能做任何用户不能做的事情做一些其他的方式。恶意软件的作者无论如何都不会听从你的建议,排除非恶意软件是没有意义的。
    • 如果作为企业管理员您真的想阻止用户运行未经批准的软件,您需要调查软件限制策略或(对于 Windows 7)AppLocker。
    • 预期已发布软件遵守约定的公司政策似乎考虑不周
    【解决方案3】:

    我建议您始终为这些安装设置 ALLUSERS=1。

    编辑

    少量添加,让您免去无休止地阅读 msdn 文章。 ALLUSERS=1 强制安装在每台机器上。这使用户配置文件保持整洁,并使软件在公司环境中易于管理。即使用户未登录,您也可以随时安装和删除软件。此外,ALLUSERS=2(允许每个用户安装)在这种环境中是不可能删除的。

    您可以在属性表中或通过命令行设置属性:

    msiexec.exe myPackage.msi ALLUSERS=1
    

    【讨论】:

    • 请注意,OP 没有使用 MSI。
    • 我不同意,请参阅我的 cmets 对 Orion 的回答。
    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2012-07-25
    • 2012-07-25
    • 2022-01-06
    相关资源
    最近更新 更多