问题标签 [custom-action]

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 投票
4 回答
7152 浏览

c# - 我需要从 MSI 源目录复制文件的 MSI 自定义操作

我正在使用 VS 2008 为 ac# windows 项目创建安装程序。我正在尝试编写一个自定义操作,该操作从存储在文件服务器上的 MSI 文件的源目录复制设置文件(例如 \server\fileshare\myappinstaller \mysetting.xml)复制到安装了我的应用程序的计算机上的目标目录(例如 C:\Program Files\My App)。

无法将设置文件添加到安装程序中,因为它将包含安装应用程序的客户所独有的设置。

有没有人有这种自定义操作的代码(最好是 C# 或 VB.NET)?或者,是否有人知道如何在自定义操作中获取 MSI 源位置(例如 \server\fileshare\myappinstaller)。

非常感谢

0 投票
3 回答
10598 浏览

error-handling - 如何在 Windows Installer 中使用托管自定义操作显示错误消息

我正在编写托管自定义操作。我正在使用 Windows Installer Xml 中的 DTF 框架将托管 dll 包装到可用的 CA dll 中。CA 做了它应该做的事情,但我仍然遇到错误处理问题:

上面的代码在 MSI 日志中生成以下文本:

MSI (c) (C4 ! C6) [13:15:08:749]:产品:TestMSI -- 错误 27533。区分大小写的密码不匹配。

错误编号是指包含在 MSI 中的错误表中的代码。上面显示的消息是正确的。

我的问题是:为什么 Windows Installer 不创建一个对话框来通知用户错误?

0 投票
1 回答
598 浏览

.net - 操作方法:复制依赖程序集以防它不在 GAC 中?

我正在使用 VS2008 构建安装包。这是为 Outlook 安装 COM 加载项应用程序的常规安装程序包。它工作正常,到目前为止。不过我需要稍微改进一下...

故事是安装包将所有依赖程序集复制到加载项的安装文件夹中。

例如,COM 加载项依赖于 Microsoft.Office.Interop.Outlook.dll 程序集。所以安装包将它复制到它的文件夹:)

当然,我可以将 Microsoft.Office.Interop.Outlook.dll 依赖项的 Exclude 属性切换为 True,这将防止程序集被复制。但是,我需要实现以下行为:

  • 如果 Microsoft.Office.Interop.Outlook.dll 不在 GAC 中,我们只需将其复制到加载项的安装文件夹
  • 否则,使用 GAC 中的那个

请建议 ti 可以在 .Net2.0 中完成的方式?一步一步的指南将不胜感激。

0 投票
1 回答
1129 浏览

wix - 如何从 Wix/DTF 中的即时自定义操作安排延迟自定义操作?

我已经看到这样的声明,即有可能,甚至很常见,从 .wxs 文件中引用一个即时自定义操作,并让该自定义操作安排后续(延迟)自定义操作。我不知道这样做的代码是什么样的。任何人?

0 投票
1 回答
1142 浏览

.net - 使用本机 .NET 配置 DCOM 设置?

前段时间,我发现了 .NET 3.5 中的 System.Directory 命名空间,它使我能够使用本机 .NET 方法轻松管理本地和域帐户,而不是使用 API 调用和导入非托管 DLL。

现在我需要在 MSI 设置中为某些旧版应用程序配置 DCOM 设置。据我所知,使用 InstallShield 2009 的板载方式无法做到这一点。

有什么方法可以使用.NET 配置 DCOM 设置,以便我能够编写托管的自定义操作,例如?

0 投票
0 回答
1120 浏览

visual-studio - VS 安装程序自定义操作问题

如果您有一个 Web 应用合并模块和一个 exe 合并模块包含在同一个设置部署项目中,则每个合并模块的自定义操作中的 Context.Parameters["AssemblyPath"] 值会变得混乱。尝试创建一个包含 web 项目和应用程序项目的 setup-deployment 项目,如下所示:

  1. 创建一个 Web 项目
  2. 为该 Web 项目创建一个合并模块
  3. 创建一个常规的 App 项目
  4. 为该应用创建合并模块
  5. 创建一个包含上述两个合并模块的安装项目
  6. 为自定义安装程序创建一个项目。
  7. 在 Commit() 方法覆盖中,访问 Context.Parameters["AssemblyPath"] 并调试打印出值。
  8. 将此自定义操作项目输出添加到您的两个合并模块。现在进行安装。根据调用此自定义操作的合并模块,您会期望打印不同的值。但他们是一样的!有时是 c:\inetpub\wwwroot 有时是 C:\MyAppDir...

不过,合并模块文件确实在正确的位置结束:
Web 项目内容进入 C:\Inetpub\wwwroot\
,而 App 项目进入“模块可重定向文件夹”。
您还会注意到每个合并模块中包含的 customactions.dll 最终会出现在正确的位置(在一个情况下是 c:\inetpub\wwwroot\,在另一个情况下是“模块可重定向文件夹”)。

但是 Context.Parameters["AssemblyPath"] 的调试打印将在两种情况下(即两个合并模块)显示相同的值。它都是 C:\Inetpub\wwwroot\CustomActions.dll 或<targetdir>\CustomActions.dll。这是错误的!


当调试打印来自基于 Web 项目的合并模块 时,调试打印应该显示C:\Inetpub\wwwroot\CustomActions.dll,当调试打印来自基于<targetdir>应用项目的合并模块时,应该显示 \CustomActions.dll。

有人知道为什么每个合并模块的值没有更新吗?这是 Microsoft VS 中的错误吗?

0 投票
2 回答
6530 浏览

c# - MSI 启动条件自定义操作

我已经能够触发 C# 自定义操作来覆盖 MSI 的安装和提交阶段。但是,在部署 ASP.NET 应用程序时,我希望能够在安装开始之前执行检查。

我知道有启动条件,但是,我希望能够在此处插入我自己的代码来处理自己启动时的检查,因为我看到启动条件只是用于检查 IIS 等的正确版本?

谁能在这里指出我正确的方向,或者即使有办法让启动条件触发一些 C#?

0 投票
1 回答
2954 浏览

installshield - 回滚时如何执行 Installshield 自定义操作?

我有一个 InstallShield 安装程序,它可以做一些事情。如果安装中断,则开始回滚。我知道我可以为我的自定义操作创建条件以使其仅在安装或卸载期间运行,但我设置哪个条件使其在回滚时运行?

确切地说,我需要回滚和删除。目前,我已经设置了 REMOVE,它在卸载时完美运行。

0 投票
1 回答
409 浏览

iis - 在修复以外的所有情况下,如何在 InstallShield 中执行某些操作?

我已配置 InstallShield 设置以在 InstallFiles 操作之前从 IIS 中删除某些 VD。该代码在“OnInstallFilesActionBefore”事件中被调用。这工作正常,除了我不希望在设置正在修复时删除 VD。

我发现这个页面列出了可能的事件;但是,似乎我最好的选择是“OnFirstUIBefore”,它只发生在第一次安装时。不过,在那里这样做似乎并不正确。

我最好向其中一个序列添加一个条件,一个会阻止它在修复期间执行代码的条件?还有其他方法吗?

作为记录,我使用的是 DevStudio v9。

0 投票
1 回答
758 浏览

windows-installer - 是否可以将条件添加到核心 InstallShield 自定义操作?(如 OnInstallFilesActionBefore)

我通过序列编辑器向OnInstallFilesActionBefore自定义操作添加了一个条件。我做到了,所以它只在您第一次安装设置时执行,这意味着我的条件是:

我现在看到编译时记录了这个警告:

ISDEV : 警告 InstallExecuteSequence 序列中自定义操作 OnInstallFilesActionBefore 的条件已被修改。这将在运行时导致不可预测的结果。

看,我认为自定义操作只是一个特定于 InstallShield 的包装器,它允许我们在 InstallFiles 操作之前添加代码。除了我添加到它的代码之外,它还会做其他事情吗?如果它所做的只是执行我添加的代码,那么我需要注意这个警告吗?我有点担心它说它“在运行时导致不可预测的结果”,好像它们是肯定的。

据我所知,它工作正常。我的代码在第一次安装时执行,但在卸载或修复时不执行。这就是我想要的。

作为记录,我使用的是 DevStudio v9。