我使用Visual Studio 2008(SP1)为Office 2007 AddIn创建了一个Visual Studio安装项目。安装程序仅将文件复制到每个用户位置(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文件似乎仅用于安装我的Office 2007 AddIn可能需要的任何先决条件。它是可以独立运行的MSI文件,用于安装实际的Office 2007 AddIn。我想学习如何标记MSI文件,使其不要求管理员权限,因为我的MSI文件只将文件复制到每个用户的位置,只将注册表设置写入HKEY_CURRENT_USER。
答案 0 :(得分:11)
我相信我在这个页面找到了答案:
http://blogs.msdn.com/b/rflaming/archive/2006/09/30/778690.aspx
如何构建标准用户包?
这需要一些工作才能将软件包安装到标准用户有权限的位置。一些要求是
在InstallUISequence中使用Type 51自定义操作始终取消设置ALLUSERS(每用户选项)
文件只能写入标准用户有权访问的文件夹。假设ALLUSERS始终设置为每用户设置,您可以使用可重定向文件夹属性,但不能使用ProgramFilesFolder,因为它不会在每个用户上重定向。
将应用安装到LocalAppDataFolder下的某个位置。
所有注册表设置都应写入HKCU,注册表的Root列中为1。
翻转摘要信息流中字数属性的第3位,表示不需要凭据提示。
如果您有引导程序(通常名为setup.exe),请显示requestedExecutionLevel以运行asInvoker。
通过ICE验证,因为ICE已检查每个用户和每个机器状态的混合不正确。
从标准用户帐户和提升的命令提示符进行测试,以确认行为。
提供用户对软件包特定用户性质的文档,因为这在今天的应用程序安装中是非常典型的。
注意:步骤5可以使用Microsoft的MSI编辑工具Orca完成。在Orca中打开MSI文件,选择View - > Summary Information ...然后选中“UAC Compliant”复选框。
注意#2:可以使用Microsoft SDK中包含的WiSumInf.vbs示例脚本文件来完成步骤5:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ Samples \ sysmgmt \ msi \ scripts \ WiSumInf .VBS
注意#3:通过右键单击安装项目,选择View - > User Interface,获取“安装/启动/安装文件夹”的属性,似乎在Visual Studio步骤项目中处理了第1步“页面并将”InstallAllUsersVisible“设置为False。
注意#4:另一种方法是执行第5步,使用“适用于Windows Installer开发人员的Windows SDK组件”中包含的MsiInfo.exe工具http://msdn.microsoft.com/en-us/library/aa370310(VS.85).aspx
除了注释#4:假设您使用的是长文件名和压缩媒体(MSI的默认行为), PostBuildEvent 命令将类似于:
"C:\Program Files (x86)\Windows Kits\8.1\bin\x86\MsiInfo.exe" "$(BuiltOuputPath)" /w 10
请注意,您必须更改MsiInfo的路径以匹配系统中的路径。
答案 1 :(得分:0)
如果您的安装程序名为“setup.exe”或“install.exe”,则Win7“知道”它是一个安装程序,默认情况下将以“require administrator”模式运行。您需要添加一个清单安装程序(内部或外部),以告诉它以较低的权限运行。
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>
有关详细信息,请参阅文章here。
答案 2 :(得分:0)
对于带有Visual Studio安装程序项目v0.9.1的Visual Studio v2017:
此解决方案需要安装在Windows SDK
在Visual Studio中:在解决方案资源管理器中选择Visual Studio Installer项目。
按F4键查看项目属性
将InstallAllUsers设置为false
在解决方案资源管理器>视图>文件系统中右键单击项目
选择应用程序文件夹。 (右键单击>“属性”窗口)
将[ProgramFilesFolder]更改为[LocalAppDataFolder]
构建MSI
(右键单击“解决方案资源管理器”>“构建”中的项目)
打开命令提示符或添加一个postbuild事件以运行Windows SDK实用程序msiinfo.exe-示例:
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\MsiInfo.exe" "c:\yourprogram\installer.msi" -w 10
注意:msiinfo.exe -w 10
开关将MSI文件的MSI“字数摘要”属性设置为“压缩-安装此软件包不需要提升的特权”。更多信息here