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 受限用户安装的主要内容,如果未能解决你的问题,请参考以下文章
Surface Pro4无法连接WiFi怎么办及提示网络受限