Installation Windows安装程序,包括每个用户和管理员部分

Installation Windows安装程序,包括每个用户和管理员部分,installation,windows-installer,uac,Installation,Windows Installer,Uac,是否可以构建一个MSI安装程序,该安装程序可以为非管理员用户进行按用户安装(将文件复制到非管理员用户的目录),但也可以将文件复制到程序文件或其他仅管理员目录?NSIS有一个UAC插件,允许一些步骤以普通用户的身份运行,而另一些步骤以提升的权限运行。MSI是否存在这种情况,或者在获得管理员权限时是否有办法保留原始用户上下文?请阅读本文: 不,这是不可能的。安装在用户上下文或提升的系统上下文中运行 但这并不能阻止您将某些文件复制到用户的配置文件中。这些文件将继承文件夹上设置的默认权限。默认设置是对用

是否可以构建一个MSI安装程序,该安装程序可以为非管理员用户进行按用户安装(将文件复制到非管理员用户的目录),但也可以将文件复制到程序文件或其他仅管理员目录?NSIS有一个UAC插件,允许一些步骤以普通用户的身份运行,而另一些步骤以提升的权限运行。MSI是否存在这种情况,或者在获得管理员权限时是否有办法保留原始用户上下文?

请阅读本文:


不,这是不可能的。安装在用户上下文或提升的系统上下文中运行

但这并不能阻止您将某些文件复制到用户的配置文件中。这些文件将继承文件夹上设置的默认权限。默认设置是对用户、系统和管理员组的完全访问权限


虽然技术上可行,但我不建议使用它。考虑一个有几个用户的计算机:其中一个安装你的MSI包,并且他们在用户的配置文件中安装文件。另一个用户登录到此计算机并从“开始”菜单启动您的应用程序:用户的配置文件中没有文件,而您的应用程序需要这些文件

克服此问题的最佳方法是将要进入用户配置文件的文件安装到程序文件中。在应用程序的第一次启动时,它会将这些文件复制到用户的配置文件中。因此,多用户计算机的每个用户都可以使用您的应用程序


如果要在用户之间共享这些数据,请考虑将它们安装到程序数据中。这样,所有计算机用户都可以看到和读取文件。但是,只有安装应用程序的用户才具有写入权限,因此安装程序应该在ProgramData中修改您的应用程序文件夹的权限,以授予其他用户写入权限。

同意答案:使用安装程序在每台机器上复制文件,然后让应用程序在首次启动时将其复制到用户配置文件中。然后在HKCU中设置一个标志,指示已为该用户执行复制操作。然而,说安装程序在用户上下文或提升的系统上下文中运行有点不准确——它实际上在这两种上下文中运行,但在安装顺序的不同时间运行。简而言之,GUI在用户上下文中运行,而文件副本以提升的权限运行。如果需要,我可以添加更长的解释作为单独的答案。空间不足here@Glytzhkof我的意思是,安装过程(复制文件、写入注册表项)要么在当前用户上下文中运行,要么在每用户安装中运行,要么在提升的系统上下文中运行,要么在每台机器安装中运行。GUI向导始终在当前用户上下文中运行。您的建议的问题以及我尝试执行上述操作的原因是,相关文件必须位于用户的appdata目录中(它是MS Word全局模板,Word在用户的启动目录中查找这些文件).@idontwanttortfm但没有任何东西可以阻止您将Word模板放入用户配置文件,即使在安装运行时也是如此。您应该使用来参考安装模板中的用户配置文件,并添加
Microsoft\Templates
。请注意,它将只安装到当前用户,计算机的其他用户将不会有您的模板文件。Office模板文件的共享位置位于
C:\Program files\Microsoft Office\Templates\1033
中。编号为
1033
的是Windows区域设置ID。@AlexeyIvanov我认为问题在于安装程序是以管理员用户身份运行的,而不是以非管理员用户身份运行的,因此模板放在错误用户的AppDataFolder中。如果我理解正确,它是一个可以按每个用户或按所有用户安装的安装程序。我正在寻找两者,也就是说,只在管理员位置安装文件,如程序文件,同时也在非管理员用户自己的目录(如用户的应用程序数据目录)中安装一些文件。