问题标签 [dtf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wix - WIX CustomAction 加载 CLR 4.0 而不是 2.0
我正在尝试编写 ac# 自定义操作并使用 .Net 2,但是我似乎无法让事情正常工作。我相信 MSI 使用了错误的 CLR 版本。我在日志文件上方的几行中看到了这一点,MSI 正在调用我的 CA(如果我注释掉我的 CA,则不会出现行):
我的自定义操作似乎没有加载(假设因为我没有看到任何日志消息)。我正在使用 Wiz 3.6.3014.0。这是否受支持,或者 Windows 安装程序是否仅使用机器上可用的最新运行时?
谢谢
wix - 如何在使用 WiX DTF 提取 MSI 时修改文件夹结构
我需要将 MSI 中的文件提取到一个文件夹中,但是更改文件的目录结构,所有这些都来自 C# 应用程序(即:不是通过管理员安装或任何其他 MSI 安装)。从概念上讲,我想将 MSI 的嵌入式 cab 解压缩到我选择的文件夹中。要进行提取,我使用的是 WiX 3.6 DTF 库,但无法确定如何更改文件夹结构。
因此,例如,如果我运行 MSI 安装程序,“Component1”的目标文件夹将为c:\Program Files(x86)\Company Name\Demo Product Installer\Component1\
,但在我的提取器应用程序运行时,我想将其更改为c:\SomeOtherPlace\Demo Product Installer\Component1\
,最好通过更改APPLICATIONFOLDER
目录路径(见下文) .
对于 MSI,我定义了这样的目录结构:
然后,在需要提取文件的代码中,我这样做了:
有没有办法在运行时使用 DTF 对象修改这样的文件夹结构?我知道我可以在事后移动文件,但如果我能这样做,它会更干净。
c# - 确定是否使用 Microsoft.Deployment.WindowsInstaller.PatchInstallation 安装了补丁
我认为这会相当简单,但是我在使用 PatchInstallation 类时遇到了问题,它是 Microsoft.Deployment.WindowsInstaller 的一部分。
获得正确的补丁代码和产品代码(目标代码)后,我只是调用了 IsInstalled 属性,但正在抛出 ArgumentNullExceptions。
异常文本是:
System.ArgumentNullException 发生 Message=Value 不能为空。参数名称:String Source=mscorlib ParamName=String
StackTrace: at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)在 Microsoft.Deployment.WindowsInstaller.PatchInstallation.get_State() 在 Microsoft.Deployment.WindowsInstaller.PatchInstallation.get_IsInstalled() InnerException:
如果有人对我做错了什么有任何想法,请告诉我!干杯!
wix - 如何在自定义操作中保存数据以在 WIX 中回滚?
有什么方法可以在 Wix 中使用 DTF 在自定义操作中存储回滚数据?在这种情况下,我需要跟踪为正确执行回滚所做的工作,并且我不知道如何将这些信息从安装期间运行的自定义操作传递到回滚时运行的操作?
c# - 将一个 msi 复制到内存,然后从中创建一个数据库对象
我在这里非常深入,所以请接受我的歉意,因为我不知道我在说什么。
我的目标是采用现有的 msi,对其进行一些更改,然后从中创建一个转换,使 msi 保持其原始状态。正如许多其他问题所建议的那样,我正在使用 DTF(WiX 的一部分)。
我的问题源于我需要两个数据库对象来创建转换;更改的数据库和参考。显然我不能从同一个文件创建两个对象,因为第一个对象锁定了它。最简单的选择是在临时目录中创建文件的副本并从新文件路径创建新对象。但是,除了保存转换之外,我真的想避免写入磁盘,因为该程序可能与不同的 VM、本地存储和网络存储混合使用。
根据我的收集,DTF 确实允许您从句柄创建数据库对象,因此我目前的方法是以某种方式在内存中使用句柄创建 msi 的副本,然后将其传递给数据库构造函数以创建一个临时对象我可以在创建转换之前对其进行更改。
不过,我不知道如何实现这一目标,我什至不确定这是否可能。MemoryMappedFile 似乎是一个不错的起点,但是当从文件创建一个文件时,它是持久的,我不知道如何基于文件创建非持久 mmf 或创建非持久 mmf 然后读取微星进去。
是否有任何可行的方法来创建磁盘上只有一个 msi 的转换?绝对欢迎任何想法/指导/呼吁接受写入磁盘,因为我显然超出了我的深度。
wix - Wix DTF 自定义操作等效于 WcaAddTempRecord
我正在尝试使用 Wix DTF 自定义操作将 MSI 运行时会话值写入注册表。我想通过将临时记录添加到数据库中的“注册表”表来实现。由于c ++有一种WcaAddTempRecord
方法可以实现这一点,所以真的很想知道DTF中是否有任何等效的方法。
注意:我尝试使用Session.Database.OpenView
插入记录,但由于会话数据库只读属性,我一直收到更新失败错误。
有人可以建议这种情况的最佳方法吗?
wix - 使用 DTF 的消息框
MSDN 上的 MsiProcessMessage 函数 doco 显示了这个例子:
这将如何使用 DTF 中的 Session.Message 来完成?唯一的重载将 Session.InstallMessage 作为参数。我看到了 MessageBoxButtons 枚举,我将这两种类型都转换为 In32 并执行逻辑或,但我不确定如何将它返回到 API 中。
我错过了什么还是 DTF 错过了什么?
c# - 使用 DTF 扩展 FilesInUse
我有一个安装程序,我编写了一个简单的自定义操作来计算属性(AppSearch 扩展)中某个进程类型的计数,然后在 LaunchConditions 中使用它来控制安装程序。客户现在想要更丰富的体验,所以我试图稍微重写一下以触发 FilesInUse 对话框。
我在 AppSearch 之后安排了这个。我看到 FilesInUse 对话框被显示,但它没有进入模态。一旦我关闭 TEST 消息框,FilesInUse 就会消失,我会看到我的 InstallWelcome 对话框。
我错过了什么?我没有使用外部用户界面...仅本机用户界面。
c# - 如何阅读 .mst(transform) Table 以及 .msi
mst + .msi 表信息。
我创建了以下函数来读取 msi 表
但是我无法使用此功能读取 .mst。我读到您需要对其使用 msi 转换,但我不想更改 msi 或 mst 的内容,我只需要阅读所有表格。请指出我正确的方向。提前致谢 :)
wix - WiX 中的 DTF XMLSchemaExtension 问题
我正在使用部署工具基础 (DTF) 框架创建自定义 WiX 扩展。我已经创建了必要的 wixlib 和扩展类。问题是当我通过我的 .wxs 文件引用此扩展时,我收到以下错误消息:
“错误 7 Product 元素包含意外的子元素 'ca:CAAppPool'。来自 xsd 验证消息 1 的一些警告找不到元素的架构信息” http://schemas.microsoft.com/wix/2005/XmlSchemaExtension :父母'。
以下是我的 XSD 文件中的一些摘录:
xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension"
在我们的架构定义文件中将我的组件标签引用为Product
/的子级,Fragment
如下所示: