问题标签 [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.

0 投票
1 回答
126 浏览

wix - 使用 DTF InstallLogModes 的事件过多

我目前正在使用以下标志记录“一切”:

这具有将大量事件写入日志文件的效果。

例如,我看到了数千个这样的:

如何禁用日志中那些极其冗长的消息?我需要保留 Progress 事件。

0 投票
1 回答
318 浏览

c# - 使用 c#(DTF) 中的产品代码卸载 MSI 时遇到的问题

我正在创建一个 CustomBA,它将替换现有的安装屏蔽 Bootstrapper(我真的不知道它叫什么)。

我们正在安装与 install shield 使用相同数量的 MSI,所以这没有问题。ARP 中的所有 MSI 条目都被删除,因为我们正在使 MSI 的 Visible="no"。

ARP 中只有 Custom BA 条目和 Install shield Bootstrapper 条目可用,两者具有相同的名称。

因此,经过一番研究,我了解到 Windows Installer XML (WiX) 将 Microsoft.Deployment.WindowsInstaller 互操作库作为部署工具基础 (DTF) 的一部分提供,可用于卸载 MSI。

我正在使用以下代码卸载 MSI。

我面临的问题如下所述

  1. 首先,我必须以管理员身份运行 CustomBA 来卸载现有的 MSI,否则它会抛出错误“错误 1730。您必须是管理员才能删除此应用程序。”。有没有办法在没有管理员的情况下运行 CustomBA 并卸载 MSI。

    1. 卸载时(当我以管理员身份运行 customBA 时),上面提到的代码也删除了它的链包,我不希望它这样做。

    2. 运行卸载代码后,它不会从 ARP 中删除 MSI 条目。

我找到了这些链接,但我不知道它是否相关: https ://stackoverflow.com/questions/17523974/how-to-uninstall-msi-using-its-product-code-in-c-sharp 检查成功卸载

0 投票
2 回答
237 浏览

wix - 使用 DTF 安装 msi 包

我们正在尝试使用 Microsoft.Deployment.WindowsInstaller dll (C#) 并安装 MSI 包。我找不到很多关于这个的例子。安装成功。如果出现错误,我想使用 lcid 以特定语言显示错误消息。所以我使用下面的方法传递错误代码。使用的 MSI 语言为英语。

我使用的方法对吗?请提供/指向我可以获得特定语言的正确错误消息的示例。

提前非常感谢。

0 投票
2 回答
547 浏览

c# - 使用 WiX DTF 获取组件代码

我一直在尝试找到一种方法来获取给定产品代码的 Windows Installer 组件代码。(我实际上是在尝试使用不包含组件代码的快捷方式来获取已安装产品的组件路径,但这是一个更长的故事。)

我遇到了 WiX DTF (Microsoft.Deployment.WindowsInstaller) 程序集,这看起来是完成 MSI 工作的好方法。当我编写以下代码时,我充满希望:

我希望我可以从 ComponentInfo 中获取组件代码。不幸的是,我认为没有办法做到这一点。

是否可以使用 WiX DTF 类获取组件代码?(或任何其他方式来实现...)

0 投票
1 回答
1118 浏览

wix - Wix 返回错误“在模块中找不到 CA 或 UI 入口点”,但在 dll 中使用了 [CustomAction]

首先,为混淆的屏幕截图道歉,并且不包括代码中的全名。

我在尝试使用 Wix 框架从 dll 中使用自定义操作时遇到问题。

我正在使用 Wix 3.10.2

我的解决方案下有一个名为 Install.CustomAction 的 C# 自定义操作项目。然后在主要的 Wix 项目中引用它。你可以在这里看到

在此处输入图像描述

我在主 Product.wxs 文件中将 CA dll 引用为二进制文件

现在在一个片段中,我有这样引用的动作

到目前为止,我希望一切正常。

在名为 CustomAction.cs 的实际 c# 文件中,我使用 [CustomAction] 属性进行了此设置

到目前为止,一切看起来都很好,并且正在按照我的预期工作。但是当我来编译所有东西时,我得到了这个错误

跟着这个错误

在模块中找不到 CA 或 UI 入口点

你知道是什么原因造成的吗?我已经指定了一个入口点并在我的 .wxs 文件中引用了 dll,但它似乎对我不起作用。

0 投票
1 回答
1183 浏览

c# - WIX:使用 DTF 以编程方式向 msi 安装程序添加和读取文件柜文件,以允许动态自定义安装程序

我们使用 WIX 工具集创建了我们的 MSI 安装程序。我们需要根据用户特定的文件(例如主题和对话)动态自定义安装程序。我们使用此链接将添加内阁文件添加到安装程序 ,但我无法阅读它。我们想知道阅读内阁文件及其文件(自定义文件)的最佳位置。我们应该在自定义操作中执行此操作还是最好的位置是什么?另外,我们需要一个可以遵循的示例代码来完成此任务吗?注意:- 我们的内阁文件将包含很多文件(txt 文件,图像等)

0 投票
1 回答
517 浏览

c# - WIX 自定义操作:使用 dllimport

我有一个 WiX 安装程序和自定义操作项目。我添加了 C# 库作为对自定义操作项目的引用。此 C# dll 使用 DllImport 到一个 C++ dll。安装时收到错误:无法加载 DLL mycpp.dll:找不到指定的模块。我添加mycpp.dll到 CA 项目并尝试使用属性:嵌入式资源,复制到输出目录 - 但没有结果。我怎样才能让我的安装程序找到mycpp.dll

0 投票
1 回答
1985 浏览

wix - MSI:在安装的 UI 阶段显示消息框

我正在更新基于 InstallShield 的安装程序。我添加了一个新的托管自定义操作,用 C# 编写,并使用 Wix DTF 打包。动作被正确调用,并执行必要的动作。

我遇到的问题是向用户显示错误消息。

方法一:MsiProcessMessage

从我读过的文章中,我了解到这MsiProcessMessage是正确的方法,但是这种方法在 UI 序列中不起作用(在安装程序实际开始复制文件和修改系统之前)。在安装顺序中,此方法有效。我使用的代码如下:

实际上不可能使用 UI 序列(立即执行)显示错误消息MsiProcessMessage吗?

方法二:MessageBox.Show

使用Windows.Forms作品来显示一个消息框。但是,消息显示在设置向导的背景中,并在 Windows 任务栏中显示一个单独的图标。

有没有办法获取安装向导的窗口句柄,这样可以解决这个问题?

0 投票
1 回答
434 浏览

wix - 系统上下文中的延迟自定义操作被拒绝访问

在延迟模式下运行 CustomAction 时,我遇到了一些权限问题。

我想杀死一些可能使用不同用户帐户运行的服务进程,从本地系统到普通用户,但只有当进程和 CA 以同一用户身份执行时,CA 才会成功。以下是一些案例和结果:

  • “process1.exe”是一个以运行安装的同一用户身份运行的进程。如果 kill CA 在 System context 中使用 Impersonate="no" 运行,则访问被拒绝
  • “process1.exe”是一个以运行安装的同一用户身份运行的进程。如果 kill CA 使用 Impersonate="yes" 在用户上下文中运行,则该进程被kill 。
  • “process1.exe”是作为另一个用户运行的进程。如果 kill CA 在用户上下文中使用 Impersonate="yes" 运行,则访问被拒绝
  • “process1.exe”是作为另一个用户运行的进程。如果 kill CA 在系统上下文中使用 Impersonate="no" 运行,则访问被拒绝
  • “process1.exe”是作为本地系统运行的进程。如果 kill CA 在用户上下文中使用 Impersonate="yes" 运行,则访问被拒绝。
  • “process1.exe”是作为本地系统运行的进程。如果 kill CA 在 System context 中使用 Impersonate="no" 运行,则该进程将被杀死。

Action=KillUserProcess,ActionType=3137,Source=BinaryData,Target=CAQuietExec,CustomActionData="C:\Windows\System32\taskkill.exe" /F /IM process1.exe) CAQuietExec: "C:\Windows\System32\taskkill.exe" /F /IM process1.exe CAQuietExec: ERROR: The process "process1.exe" with PID 3164 could not be terminated. CAQuietExec: Reason: Access is denied. CAQuietExec: CAQuietExec: Error 0x80070001: Command line returned an error. CAQuietExec: Error 0x80070001: QuietExec Failed CAQuietExec: Error 0x80070001: Failed in ExecCommon method

Action=KillSysProcess,ActionType=3137,Source=BinaryData,Target=CAQuietExec,CustomActionData="C:\Windows\System32\taskkill.exe" /F /IM process2.exe) CAQuietExec: "C:\Windows\System32\taskkill.exe" /F /IM process2.exe CAQuietExec: SUCCESS: The process "process2.exe" with PID 4596 has been terminated.

如果 LocalSystem 无权终止进程,谁有?从命令提示符运行这些命令在提升时没有问题。即使使用来自 SysInternal 的 psexec 将命令作为系统工作运行也没有问题。只有在通过 MSI 运行时才会遇到这些问题。

是否可以将自定义操作作为系统杀死进程运行,而不是仅由系统拥有?

0 投票
0 回答
677 浏览

c# - Wix DTF 自定义操作因 Rundll32 错误而间歇性失败

我有一个 WIX DTF 自定义操作间歇性失败并出现 Rundll32 错误:

SFXCA:RUNDLL32 返回错误代码:-1073740771

这是在自定义操作成功完成所有工作之后。我看到一个日志条目,表明该方法一直运行到最后并返回成功。这已接近 MSI 的结尾,并且已经执行了 12 个其他托管自定义操作。日志中没有任何内容表明输入了 catch 块。

这可能是 DTF 代码中的错误吗?我将 Wix 工具集 3.11.0.1701 与 Visual Studio 2017 一起使用。

我查看了“注意:1:2265”的含义,显然 Windows 安装程序错误 2265 是“无法提交存储”。我不确定这指的是哪种存储。

这是自定义操作代码(简化和编辑):

这是 Windows 安装程序日志的相关部分: