我对将资源组织成组件的规则有疑问。
我想要做的是以下内容;有两个文件(均为64位),它们具有相同的文件名,但位于不同的源位置且具有不同的组件GUID;
C:\ data \ win7 \ driver.sys C:\ data \ win10 \ driver.sys
我希望安装程序中同时包含这两个文件,安装程序何时运行,请根据操作系统决定将这两个文件中的哪个文件安装在同一位置:
C:\ Program Files \ MyProgram \ driver.sys
这是否违反有关组件的规则? (主要申请者是我要说的第一个:)
“永远不要创建两个组件以相同的名称和目标位置来安装资源。如果必须在多个组件中复制资源,请在每个组件中更改其名称或目标位置。此规则应在应用程序,产品,产品版本和公司。”
https://docs.microsoft.com/en-us/windows/desktop/Msi/organizing-applications-into-components
答案 0 :(得分:0)
实际答案 :是的,将不同的文件安装到同一绝对路径确实违反了MSI组件规则-在 理论。正如您发现阅读文档一样。然而, 看到只有一个文件会放在盒子上,这全是语义 实际上,永远不会安装两个文件。不过,MSI会 可能无法验证-您会看到验证错误。
我不确定技术含义,但是您能否提出 文件名称因操作系统而异?然后您只需将文件放入 分离组件并使用不同的组件GUID和条件 是否安装组件。立即完全合规。
话虽如此,看来驱动程序文件将使用 将来会以独立程序包形式提供INF文件。请阅读下面的内容。
实用的组件规则 :这确实是一个众所周知的问题。我有一个可能会有所帮助的旧答案: Change my component GUID in wix? ,它描述了组件规则在实践中如何工作,以及您引用的想法是计算绝对路径,而不是每个文件-se。请仔细阅读以使其更清晰。 More links in this answer。
驱动程序安装 :我们应该知道如何执行此操作,但是需要the rules keep changing(和another answer)。本质上,驱动程序将通过 Windows Update
分发,或者至少通过 standalone package
分发,以后无需安装程序(直到Microsoft更改)他们的想法又来了?)。 Windows Hardware Dev Center dashboard。据我了解安装是INF-based(和以前一样)。
问题 :您确定该安装位置吗?文档说什么?我以为 sys
文件应该主要放在Windows文件夹中?或 WinSxS
文件夹(并排Win32程序集)。如您所知,安装驱动程序会使我们所有人困惑。
Windows 10检测 :由于Microsoft的新“常绿无版本性”,检测Windows 10似乎是一个挑战。我写下了这个旧答案,以总结对它的当前理解:Windows 10 not detecting on installshield。诸如Advanced Installer之类的部署工具可以帮助您完成工作,并通过简单的措施检测Windows 10。不知道Installshield会做什么。链接的答案列出了几种自行检测版本的方法-不确定哪种方法更明智。请阅读(并在成功打包后再报告任何有趣的发现)。