Windows 受限用户安装

Posted

技术标签:

【中文标题】Windows 受限用户安装【英文标题】:Windows Limited User Installation 【发布时间】:2009-09-17 08:23:29 【问题描述】:

我有一个 Win32 应用程序,其中包括一个 EXE、一个 ActiveX 控件 (DLL) 和一个 COM 服务器 (EXE),并且我正在使用 Inno Setup 5 来构建我的安装程序。我们的许多客户使用有限的用户帐户,用户没有管理员权限,并且由于需要注册 COM 组件(写入 HKEY_CLASSES_ROOT),我的安装文件必须以提升的(管理员)权限运行。我认为这是不可避免的(遗憾的是,由于我有 EXE COM 服务器,我不能使用免注册 COM)。但是,我想创建一个可以作为受限用户运行的更新安装程序,并正在寻求一些建议。

我的想法如下:

初始设置(首次安装)将应用程序安装到 %ALLUSERSPROFILE%\Application Data\CompanyName\AppName 而不是 %PROGRAMFILES%。 COM 组件已正常注册(因为它们不存在)。 后续更新(使用不同的 Inno Setup 脚本)只会将新文件复制到 %ALLUSERSPROFILE%\Application Data\CompanyName\AppName。希望即使是受限用户也能拥有此文件夹的写入权限,并且由于 COM 组件已经注册,因此不需要管理员权限。

这意味着我的客户可以升级到最新最好的版本,而无需使用管理员帐户。这是可以接受的还是可能会咬我的后背?我很确定 Google Chrome 会做类似的事情,但由于它没有 COM 组件(据我所知),即使初始设置也可以作为受限用户。

确实非常欢迎遇到此问题的其他人提供任何建议。

【问题讨论】:

【参考方案1】:

好的,我找到了一种创建受限用户安装脚本的方法,其中我的 COM 服务器和 COM 对象都是按用户注册的。

我正在使用 MSVC 2008 附带的最新版本的 ATL (v9) 来创建我的 COM 服务器和 COM 对象。事实证明,您可以通过新的/RegServerPerUser 开关为每个用户注册 COM 服务器。我在 XP、Vista 和 Windows 7 上使用有限的用户帐户对此进行了测试,它运行良好。

接下来,COM 控件。再次,ATL9 进行救援。您可以通过确保RegSvr32 调用控件的DllInstall 函数,向其传递user 的命令行参数来为每个用户注册一个控件。因此,要以这种方式注册控件,您只需执行以下操作:

regsvr32.exe /i:user /n MyControl.DLL

再次,我在 XP、Vista 和 Windows 7 上对此进行了测试,并且运行良好。

然后我对我的 Inno Setup 脚本进行了以下更改:

如果用户具有管理员权限,默认安装文件夹将为 pf(即 C:\Program Files)。如果不是,则默认为 commonappdata(即 C:\Documents and Settings\All Users)。 使用新的/RegServerPerUser 开关注册我的 COM 服务器。 我从我的 COM 对象中删除了 regserver 标志,而是添加了对使用新的“用户”开关调用 regsvr32 的支持。

使用 Inno Setup code 功能可以轻松完成所有这些更改。

感谢 Kim 为我设置了每个用户的 COM 安装路径。

【讨论】:

【参考方案2】:

我不确定,但我似乎记得 COM 服务器支持按用户安装,也许这也适用于 EXE 服务器。

如果是这样,请将您的注册码更改为将信息写入HKEY_CURRENT_USER\Software\Classes 而不是HKEY_CLASSES_ROOT

COM 基础结构应该首先对每个用户进行查找,然后再对每个机器进行查找。

无论如何都值得尝试一下。

【讨论】:

【参考方案3】:

如果您转储了 inno-setup 并使用了 MSI - MSI 文件支持有限用户安装补丁的想法。初始安装必须由管理员授权,此后补丁 msi 文件中的数字签名由提升的 msi 服务处理,无需用户提升。

您可以自己复制这个基本概念 - 在初始管理安装期间,安装具有必要访问权限的服务组件。处理补丁时,请服务进程处理EXE COM服务器注册。

【讨论】:

【参考方案4】:

您需要重新考虑您的方法 ... 对文件夹的写访问权限,而不是允许同一用户执行程序是所有病毒/恶意软件功能的 99% 的原因。请稍微了解一下软件限制政策和 Windows 7 中内置的新 App Locker 行为,以便计算基础架构可以向前发展而不是向后发展。

【讨论】:

以上是关于Windows 受限用户安装的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的windows里开启来宾账户,但是来宾账户不能登录

在受限用户帐户下运行程序

Surface Pro4无法连接WiFi怎么办及提示网络受限

theano-windows学习笔记十五——受限玻尔兹曼机

Windows Phone 平台是不是支持应用程序开发人员的受限/测试版?

网络受限---解决