【发布时间】:2017-09-28 21:39:38
【问题描述】:
我在 VS2015 中使用 NetOffice 并针对 .NET 2.0 制作了一个 Outlook 插件,现在我需要将它打包以供非管理员用户安装(它不需要管理员权限)。我通常使用 ClickOnce,但它不见了(假设是因为我没有使用 VSTO?),所以我下载并安装了 Visual Studio 2015 安装程序项目(似乎很容易使用)。
This SO question/answer 似乎是我正在寻找的解决方案,但是当我运行 MSI 文件时,它仍然需要管理员密码。输入管理员密码后,所有文件都将添加到用户的 AppData 文件夹中。那么为什么仍然需要管理员密码呢?我在这里想念什么?
SO 问题中概述的 9 个步骤:
- 在 InstallUISequence 中使用 Type 51 自定义操作来始终取消设置 ALLUSERS(每个用户选项)
- 文件只能写入标准用户有权访问的文件夹。假设 ALLUSERS 始终设置为每用户设置,您可以使用可重定向文件夹属性,但不能使用 ProgramFilesFolder,因为它不会在每用户上重定向。
- 将应用安装到 LocalAppDataFolder 下的某个位置。
- 应将所有注册表设置写入注册表表根列中为 1 的 HKCU。
- 翻转摘要信息流中字数属性的第 3 位以表示不需要凭据提示。
- 如果您有一个引导程序(通常命名为 setup.exe),请将 requestedExecutionLevel 清单化为作为Invoker 运行。
- 通过 ICE 验证,因为 ICE 会检查是否错误地混合了每个用户和每个机器的状态。
- 从标准用户帐户和提升的命令提示符进行测试以确认行为。
- 为您的用户提供有关软件包用户特定性质的文档,因为这在当今的应用程序安装中并不常见。
这是我所做的:
第 1 步:设置项目 -> 查看-> 用户界面 -> 将“InstallAllUsersVisible”设置为 False(根据 SO 答案)
第 2 步:在设置文件系统中,我添加了“用户的应用程序数据文件夹”,然后是“本地”,然后是“项目名称”,然后添加了项目输出 -> 主输出。我试图删除“应用程序文件夹”,但它说它是必需的,不会被删除。
第 3 步:我相信这就是我在上面所做的......
第 4 步:我没有添加任何注册表项。这是必须的吗?
第 5 步:根据 SO 答案,我下载了 Orca 并打开了 MSI 文件。但是,当我转到查看 - > 摘要信息并查找字数属性时,它不存在。我浏览了所有表格,但在任何地方都找不到。
第 6 步:在安装文件属性中取消选中“创建安装程序以安装必备组件”后,我不再有 setup.exe 文件。
第 7 步:我阅读了一些关于 ICE 验证的简介,但不确定我需要在这里做什么。
现在跳过第 8 步和第 9 步。
其他:在 Orca 中环顾四周时,我注意到在 CustomAction 表中 DIRCA_TARGETDIR 仍设置为程序文件夹,因此我将其更改为 [AppDataFolder][Manufacturer][ProductName]。
【问题讨论】:
-
多年来,我撰写了许多 Office 插件安装程序/博客文章。 IMO 使用 MSI 的全部意义在于,您可以拥有一个引导程序来安装所有先决条件并在每台机器上安装 MSI。如果您的要求是每个用户/从不需要提升权限,为什么不直接使用 ClickOnce?我自己可能并不关心它,但这就是它的设计目的。
-
我一直使用 ClickOnce,但对于这个插件,我不能使用 VSTO(未安装在用户计算机上)。所以我使用 NetOffice 并使用他们的“开发者工具箱”创建了我的项目。当我在 VS2015 中打开它并转到项目属性时,缺少“发布”选项卡,并且“签名”选项卡下的 ClickOnce 显示为灰色。如果我能立即弄清楚如何使用 ClickOnce,我会的。
-
嗯.. 我从来没有使用过那个 SDK。也许有一个导入目标可以添加到他们生成的 MSBuild 项目文件中,可以启用它。另一种选择是查看github.com/Squirrel/Squirrel.Windows .. 不要误会我的意思,我喜欢 MSI,我喜欢按机器安装,但如果你的故事真的是按用户的,我认为还有其他选择你可能会更喜欢。
标签: c# windows-installer installation visual-studio-setup-proje