我是一名游戏开发商,为各种Windows(WinXP,Vista,Win7,Win8,包括X64变体)发布桌面MMO游戏,其普通受众范围从技术娴熟到非技术娴熟。
游戏需要能够定期更新自身,这意味着需要在客户的计算机上安装和配置具有适当的UAC权限,以便它可以更新任何和所有已安装的文件,包括可执行文件本身
我创建了一个配置为在没有管理员权限的情况下运行的NSIS安装程序(RequestExecutionLevel用户),并将游戏(默认情况下)安装到用户的$ LOCALAPPDATA,以便该游戏不需要提升权限来执行。我为我的游戏安装的可执行文件是使用清单构建的,告知Windows它不需要提升权限(这是为了避免每次尝试玩游戏时都出现丑陋的盾牌图标和管理员提示。)
我遇到的原始问题如下:
作为临时解决方法,我重建了NSIS安装程序以使用管理员权限运行,但是,这可能会导致另一个问题,即客户将默认安装目录更改为特权目录,然后游戏本身将无法执行。作为这个问题的临时解决方法,我已经禁用了更改默认安装位置的功能,直到我能够提出完整的解决方案。
我能想到的理想解决方案是允许NSIS正常运行,检测是否需要管理员权限并在此时提示然后禁止玩家安装到提升的特权位置的方法。我对NSIS的经验不足以了解是否一切皆有可能。
非常感谢任何指导!
答案 0 :(得分:0)
可执行文件,无论是安装程序还是简单应用程序,都应该能够从需要写入权限的位置运行,例如Program Files文件夹,即使没有提升也是如此。可执行文件需要这些权限的唯一时刻是,如果它实际上尝试在该位置写入,则安装程序的情况是,例如,它是否会尝试提取在文件夹中执行安装所需的一些临时文件它被复制的地方。
例如,安装在Program Files文件夹中的许多应用程序中的一个应用程序不需要管理员权限即可运行,只需双击快捷方式即可打开。
检查您的安装程序(我不熟悉NSIS体系结构)是否对安装期间使用的临时文件使用特殊的提取文件夹,并查看是否可以将其更改为不需要管理员权限的位置。
我能想到的理想解决方案是允许NSIS正常运行,检测是否需要管理员权限并在此时提示,然后禁止玩家安装到提升的特权位置。
即使使用我所知道的低级API,也是不可能的,但最重要的是您不需要应用这样的解决方案。如果我是正确的,提取文件夹应该是导致问题的文件夹。希望NSIS允许您轻松配置并将其设置到正确的位置。