代码之家  ›  专栏  ›  技术社区  ›  Rob

Windows受限用户安装

  •  3
  • Rob  · 技术社区  · 15 年前

    我有一个包含一个exe、一个ActiveX控件(dll)和一个COM服务器(exe)的win32应用程序,我正在使用inno安装程序5来构建我的安装程序。我们的许多客户使用有限的用户帐户,其中用户没有管理员权限,并且由于COM组件需要注册(写入到HKEY U classes U root),因此我的安装文件必须以提升的(管理员)权限运行。我认为这是不可避免的(遗憾的是,我不能使用免费注册的COM,因为我有一个exe-com服务器)。但是,我想创建一个更新安装程序,可以作为一个有限的用户运行,并正在寻找一些建议。

    我的想法是:

    • 初始安装程序(首次安装)将应用程序安装到%allusersprofile%\application data\companyname\appname中,而不是%programfiles%。COM组件注册为正常(因为它们将不存在)。
    • 后续更新(使用不同的Inno安装脚本)只需将新文件复制到%AllUsersProfile%\Application Data\CompanyName\AppName中。希望即使是一个有限的用户也可以对这个文件夹进行写访问,并且由于COM组件已经注册,所以不需要管理员访问。

    这意味着我的客户可以升级到最新和最好的版本,而不用麻烦使用管理员帐户。这是可以接受的还是很可能在背后咬我?我很确定Google Chrome也有类似的功能,但是它没有COM组件(据我所知),即使最初的设置也可能是有限的用户。

    面对这个问题的其他人的任何建议都将是非常受欢迎的。

    4 回复  |  直到 13 年前
        1
  •  2
  •   Kim Gräsman    15 年前

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

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

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

    无论如何,这值得一次试验。

        2
  •  4
  •   Rob    15 年前

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

    我正在使用MSVC 2008附带的最新版本的ATL(V9)来创建我的COM服务器和COM对象。结果表明,您可以通过新的 /RegServerPerUser 开关。我在XP、Vista和Windows7上用有限的用户帐号测试过这个,它运行得很好。

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

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

    同样,我在xp、vista和windows 7上测试了这个,它工作得很好。

    然后,我对Inno设置脚本进行了以下更改:

    • 默认安装文件夹将是 {pf} (即C:\Program Files)如果用户具有管理权限。如果没有,则默认为 {commonappdata} (即C:\文档和设置\所有用户)。
    • 使用新的 /RegServerPeruser 开关。
    • 我移除了 regserver 来自我的COM对象的标志,并添加了使用新的“user”开关调用regsvr32的支持。

    所有这些更改都可以使用Inno设置轻松完成。 {code} 特征。

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

        3
  •  0
  •   Chris Becke    15 年前

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

    您可以自己复制这个基本思想-在初始管理安装期间,安装一个具有必要访问权限的服务组件。处理修补程序时,要求服务进程处理exe com服务器注册。

        4
  •  0
  •   pcunite    13 年前

    你需要重新考虑你的认可…对文件夹的写访问权限超过了允许同一用户执行程序的权限,这是所有病毒/恶意软件功能99%的原因。请稍微了解一下软件限制策略和Windows7中内置的新应用程序锁定器行为,以便计算基础结构可以向前而不是向后移动。