为了账号安全,请及时绑定邮箱和手机立即绑定

Windows 安装程序禁止某些安装位置

Windows 安装程序禁止某些安装位置

C#
拉莫斯之舞 2021-07-02 21:05:01
有一个由用户手动运行的 msi 文件。在大多数情况下,他们需要能够选择安装目录,但是我们需要禁止某些安装位置。例如,它安装到根目录下C:\会引起各种各样的问题,所以我们需要是覆盖该决定(即覆盖C:\带C:\Program Files (x86)\xxx)或弹出一个错误。有什么方法可以强制执行此操作吗?有问题的 msi 已经具有自定义操作,但是似乎没有办法从那里编辑安装位置。或者,在这种情况下,msi 被包裹在一个 WiX 包中,所以如果我们可以禁止某些目录,那也很好。也找不到方法来做到这一点(只知道如何用 编辑默认值<Variable Name="InstallFolder" ...>)只有我能想到的其他解决方案会相当可怕:制作一个单独的应用程序,选择一个目录,然后使用可接受的目录运行安装程序。这可以通过 msi 或 WiX Bundle 完成吗?我正在使用“Visual Studio 2013 安装程序项目”扩展来构建 msi。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

相反的观点:

一般来说,这是一个坏主意。在大多数情况下,正确的答案是将应用程序代码安装到适当的 Program Files 文件夹(64 位或 x86)并将数据文件安装到数据位置等,用户应该别无选择。我不清楚当(例如)Windows 认证规则规定您的代码必须转到 Program Files 位置时,选择是否是一个好主意,因此请正确操作。用户只关心已安装的应用程序是否正常工作,如果安装到某些位置时失败,那么答案是 1) 修复应用程序以使其正常工作或 2) 使用程序文件并且让用户别无选择。

此外,如果您使用的是 Visual Studio 安装程序项目,则无法编写自定义操作来执行此操作,因为它们都运行得太晚而无法更改安装位置。你似乎已经发现了这一点。但是您可以隐藏浏览文件夹对话框并安装到默认的正确位置。

另一个问题是不清楚如何定义“允许”的位置。如果不是 C:\,那么它可以是 D:\SomeOtherLocation 吗?它可以是连接的USB驱动器吗?它可以是网络共享,例如 \\Servername\share 吗?映射到网络共享的驱动器?可能有许多选定的位置会在安装或应用程序运行时失败,我认为没有一个有用的允许列表。最重要的是,假设您有 32 位安装,并且用户在 64 位系统上选择本机 Program Files 文件夹,然后它甚至不会去那里 - 它会被重定向到 Program Files(x86)地点。最后,假设用户在命令行上指定了一个位置,你在静默安装模式下做了什么还不清楚,它没有通过你的测试,

换句话说,只需安装到 Program Files 并完成它。


查看完整回答
反对 回复 2021-07-03
?
九州编程

TA贡献1785条经验 获得超4个赞

基于用户能够手动安装它(并因此使用 UI 序列),它可能更容易:

  1. 在 InstallUISequence 中,将 LaunchCondition 操作排序到 ExecuteAction 操作之前。

  2. 然后在 LaunchCondition 表中,添加如下条件:

    条件: TARGETDIR~<<"C:\Program Files\"

    描述: 您必须安装到 Program Files 文件夹

我们在条件中所说的是:

如果 TARGETDIR 以“C:\Program Files\”开头(因此用户可以在此文件夹下的任何位置安装),请继续安装。否则抛出错误。

而不是阻止某些位置,我可能只是强制执行 Program Files 文件夹作为最佳实践。


查看完整回答
反对 回复 2021-07-03
  • 3 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信