0

我是一名游戏开发人员,为所有类型的 Windows(WinXP、Vista、Win7、Win8 包括 X64 变体)发布桌面 MMO 游戏,其受众范围从精通技术到非技术精通。

该游戏需要能够在任何时候定期自我更新,这意味着它需要在客户的机器上安装和配置并具有适当的 UAC 权限,以便它可以更新任何和所有已安装的文件,包括可执行文件本身。

我创建了一个 NSIS 安装程序,该安装程序配置为在没有管理员权限(RequestExecutionLevel 用户)的情况下运行,并将游戏(默认情况下)安装到用户的 $LOCALAPPDATA 以便该游戏不需要提升权限即可执行。我为我的游戏安装的可执行文件是用一个清单构建的,该清单通知 Windows 它不需要提升权限(这是为了避免每次尝试玩游戏时出现丑陋的盾牌图标和管理员提示)。

我遇到的原始问题如下:

  1. 客户正在下载 NSIS 安装程序,然后将其复制到特权位置,并且安装程序在没有任何提示它未运行的情况下静默运行失败,因为它在没有管理员权限的情况下运行。

作为一种临时解决方法,我重新构建了 NSIS 安装程序以使用管理员权限运行,但是,这可能会引发另一个问题,即客户将默认安装目录更改为特权目录,然后游戏本身将无法执行。作为该问题的临时解决方法,我禁用了更改默认安装位置的功能,直到我想出一个完整的解决方案。

我能想到的一个理想的解决方案是让 NSIS 正常运行,检测它是否需要管理员权限并在此时提示,然后禁止玩家安装到提升的特权位置。我对 NSIS 的经验不足,不知道这是否可能。

任何指导将不胜感激!

4

1 回答 1

0

一个可执行文件,无论是安装程序还是简单的应用程序,都应该能够从需要写入权限的位置运行,例如 Program Files 文件夹,即使没有提升。可执行文件需要这些权限的唯一时刻是,如果它实际上尝试在该位置写入,安装程序的情况是,例如,它会尝试提取一些在文件夹中执行安装所需的临时文件它被复制到哪里。

以您机器上安装在不需要管理员权限即可运行的 Program Files 文件夹中的众多应用程序之一为例,您只需双击快捷方式即可打开它。

检查您的安装程序(我不熟悉 NSIS 架构)是否使用特殊的提取文件夹来存放安装期间使用的临时文件,并查看您是否可以将其更改为不需要管理员权限的位置。

我能想到的一个理想的解决方案是让 NSIS 正常运行,检测它是否需要管理员权限并在此时提示,然后禁止玩家安装到提升的特权位置。

即使使用我所知道的低级 API,这也是不可能的,但最重要的是您不需要应用这样的解决方案。如果我是正确的,提取文件夹应该是导致您出现问题的文件夹。希望 NSIS 允许您轻松配置它并将其设置到正确的位置。

于 2013-09-08T19:30:58.667 回答