如何使有限(非管理员)用户的设置工作

问题描述 投票:9回答:3

我使用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。

installer windows-installer installation
3个回答
11
投票

我相信我在这个页面上找到了答案:

http://blogs.msdn.com/b/rflaming/archive/2006/09/30/778690.aspx


如何构建标准用户包?

这需要一些工作才能将程序包安装到标准用户有权限的位置。一些要求是

  1. 在InstallUISequence中使用Type 51 Custom Action始终取消设置ALLUSERS(每用户选项)
  2. 文件只能写入标准用户有权访问的文件夹。假设ALLUSERS始终设置为每用户设置,您可以使用可重定向文件夹属性,但不能使用ProgramFilesFolder,因为它不会在每个用户上重定向。
  3. 将应用安装到LocalAppDataFolder下的某个位置。
  4. 应将所有注册表设置写入HKCU,注册表的根列中为1。
  5. 翻转摘要信息流中的字计数属性的第3位,以表示不需要凭证提示。
  6. 如果您有一个bootstrapper(通常名为setup.exe),请显示requestedExecutionLevel以运行asInvoker。
  7. 通过ICE验证,因为ICE检查每个用户和每个机器状态的混合不正确。
  8. 从标准用户帐户和提升的命令提示符进行测试以确认行为。
  9. 提供用户对软件包特定用户性质的文档,因为这在当今的应用程序安装中是非典型的。

注意:步骤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:步骤1似乎在Visual Studio步骤项目中通过右键单击安装项目,选择视图 - >用户界面,获取“安装/启动/安装文件夹”页面的属性和设置来处理“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的路径以匹配系统中的路径。


2
投票

对于Visual Studio v2017和Visual Studio Installer Projects v0.9.1: 此解决方案需要一个命令行工具,该工具作为Windows SDK的一部分安装

  1. 在Visual Studio中:在“解决方案资源管理器”中选择Visual Studio Installer项目。 按F4键以查看项目属性 将InstallAllUsers设置为false
  2. 在解决方案资源管理器>视图>文件系统中右键单击项目 选择Application Folder。 (右键单击>属性窗口) 将[ProgramFilesFolder]更改为[LocalAppDataFolder]
  3. 构建MSI (在解决方案资源管理器>构建中右键单击项目)
  4. 打开命令提示符或添加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


0
投票

如果您的安装程序名为“setup.exe”或“install.exe”,则Win7“知道”它是一个安装程序,默认情况下将以“require administrator”模式运行。您需要添加一个清单安装程序(内部或外部),以告诉它以较低的权限运行。

MSDN的示例清单如下所示。将值'IsUserAdmin'更改为您的程序名称,然后将其保存为execode旁边的文件夹中的'executablename.exe.manifest'。

<?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

© www.soinside.com 2019 - 2024. All rights reserved.