Installation 如何为有限(非管理员)用户进行设置
我已经用VisualStudio2008(SP1)为Office2007插件创建了一个VisualStudio安装项目。安装程序仅将文件复制到每个用户的位置(Installation 如何为有限(非管理员)用户进行设置,installation,windows-installer,Installation,Windows Installer,我已经用VisualStudio2008(SP1)为Office2007插件创建了一个VisualStudio安装项目。安装程序仅将文件复制到每个用户的位置(LocalAppData),并仅将注册表设置写入HKEY_CURRENT_user),但在Windows 7下运行时,MSI会在开始复制文件之前请求管理员凭据。安装程序在Windows XP上的有限用户帐户下运行,但在Windows 7下,似乎需要管理员权限 我还没有找到一种方法来删除管理员提升要求,我想知道如何做到这一点,或者如果Visu
LocalAppData
),并仅将注册表设置写入HKEY_CURRENT_user
),但在Windows 7下运行时,MSI会在开始复制文件之前请求管理员凭据。安装程序在Windows XP上的有限用户帐户下运行,但在Windows 7下,似乎需要管理员权限
我还没有找到一种方法来删除管理员提升要求,我想知道如何做到这一点,或者如果Visual Studio安装项目无法做到这一点
更新2010-11-03(更多详细信息)
当我构建Visual Studio安装项目时,它会创建一个Setup.exe和一个MSI文件。Visual Studio 2008似乎无法对setup.exe的创建方式或MSI文件的创建方式提供足够的控制。setup.exe文件似乎仅用于安装my Office 2007加载项可能需要的任何先决条件。安装实际Office 2007加载项的是可以独立运行的MSI文件。我想学习如何标记MSI文件,使其不要求管理员权限,因为我的MSI文件仅将文件复制到每个用户的位置,并且仅将注册表设置写入
HKEY_CURRENT_user
如果您的安装程序名为'setup.exe'或'install.exe',Win7“知道”它是一个安装程序,默认情况下将在“需要管理员”模式下运行。您需要为安装程序添加清单(内部或外部),以告知它以较小的权限运行
MSDN的清单示例如下所示。将值“IsUserAdmin”更改为程序名,然后将其另存为“executablename.exe.manifest”,保存在exe旁边的文件夹中
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
更多信息。我相信我已经在本页找到了答案:
如何构建标准用户包
要使软件包只安装到标准用户有权限的位置,这需要一些工作。其中一些要求是
在InstallUISequence中使用Type 51自定义操作始终取消ALLUSERS(每个用户选项)
文件只能写入标准用户有权访问的文件夹。假设ALLUSERS始终设置为每用户设置,则可以使用可重定向文件夹属性,但不能使用ProgramFilesFolder,因为它不会对每用户进行重定向
将应用程序安装到LocalAppDataFolder下的位置
所有注册表设置都应写入HKCU,HKCU在注册表表的根列中为1
翻转摘要信息流中单词计数属性的第3位,表示不需要凭证提示。
如果您有一个引导程序(通常名为setup.exe),请将requestedExecutionLevel显示为运行Invoker
通过ICE验证,因为ICE检查每个用户和每个机器状态的混合是否不正确
从标准用户帐户和提升的命令提示符进行测试,以确认行为
提供用户关于软件包特定于用户的特性的文档,因为这在今天的应用程序安装中是不典型的
注意:第5步可以使用微软的MSI编辑工具Orca完成。在Orca中打开MSI文件,选择查看-->摘要信息。。。然后选中“UAC兼容”复选框
注#2:步骤5可以使用Microsoft SDK中包含的WiSumInf.vbs示例脚本文件完成:C:\Program Files\Microsoft SDK\Windows\v7.0\Samples\sysmgmt\msi\scripts\WiSumInf.vbs
注意#3:在Visual Studio Step项目中,似乎可以通过右键单击安装项目,选择查看-->用户界面,获取“安装/启动/安装文件夹”页面的属性,并将“InstallAllUsersVisible”设置为False来完成步骤1
注意#4:执行步骤5的另一种方法是使用“Windows安装程序开发人员的Windows SDK组件”中包含的msinfo.exe工具
除了注释#4:假设您使用的是长文件名和压缩介质(MSI的默认行为),PostBuildEvent命令类似于:
"C:\Program Files (x86)\Windows Kits\8.1\bin\x86\MsiInfo.exe" "$(BuiltOuputPath)" /w 10
请注意,您必须更改MsiInfo的路径,以匹配它在系统中的路径。对于Visual Studio v2017和Visual Studio安装程序项目v0.9.1:
此解决方案需要一个命令行工具,该工具作为
在Visual Studio中:在解决方案资源管理器中选择Visual Studio安装程序项目。
按F4键查看项目属性
将InstallAllUsers设置为false
右键单击解决方案资源管理器>视图>文件系统中的项目
选择应用程序文件夹。(右键单击>属性窗口)
将[ProgramFilesFolder]更改为[LocalAppDataFolder]
构建MSI
(在“解决方案资源管理器”>“生成”中的项目上单击鼠标右键)
打开命令提示符或添加后期生成事件以运行Windows SDK实用程序msinfo.exe-示例:
“C:\Program Files(x86)\Windows Kits\10\bin\10.0.17763.0\x86\msinfo.exe”“C:\yourprogram\installer.msi”-w 10
注意:msinfo.exe-w 10
开关将MSI文件的MSI“字数摘要”属性设置为“压缩-安装此软件包不需要提升权限”。更多信息我不确定是否可以将该解决方案应用到我的场景中。当我构建Visual Studio安装项目时,它会创建一个Setup.exe和一个MSI文件。另外,VisualStudio2008似乎没有给我足够的控制权来控制这些文件是如何创建的。setup.exe的目的似乎只是安装可能需要安装的任何先决条件。但是,是MSI文件执行实际指令