【问题标题】:Can I use Orca to add a Custom Action to an MSI file, where the action is a C# method?我可以使用 Orca 将自定义操作添加到 MSI 文件,其中操作是 C# 方法吗?
【发布时间】:2017-11-29 10:00:54
【问题描述】:

我创建了一个 MSI 文件,但我希望文件中的特定 C# 方法用于在 InstallExecuteSequence 表中的 ExecuteAction 操作之前发生的自定义操作中。我有什么方法可以更新 Orca 中的 Binary 表,以便它引用 MSI 文件中的特定方法?

有关详细信息,我的 MSI 文件使用三个独立的 C# 类库项目。我想在自定义操作中使用的方法称为InitialAction,位于Initialise 项目中名为Initialise.cs 的CS 文件中。

【问题讨论】:

  • 正如 Phil 所说,在进行自定义操作时问自己的最佳问题是:在应用程序启动时,这是否可以在应用程序本身中做得更好、更可靠? 应用程序将始终在预期的上下文(用户)中运行,并且可能与 UAC 提升或不(最​​好不是)一起运行。 MSI 具有复杂的排序、复杂的调节(以什么顺序运行)、复杂的模拟(有时作为 LocalSystem 运行)和复杂的自定义操作实现细节。模拟的自定义操作为整个方程式增加了另一层不可预测性。尽量避免 CA。

标签: c# windows-installer custom-action orca


【解决方案1】:

不,你不能。 Windows Installer 本身不支持托管代码自定义操作。这里提到的Dll类型:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa372048(v=vs.85).aspx

在具有标准所需入口点签名的 Win32 Dll 中。托管代码自定义操作通常使用调用托管代码的 shim C++ Dll (Visual Studio) 或调用外部进程 (WiX DTF) 的 C++ 来实现。如果您使用的是 Visual Studio 或 WiX,两者都提供对托管代码自定义操作的支持。

话虽如此,您的代码需要直接调用吗?支持运行外部可执行文件,无论是否托管代码。可执行文件可以调用类库。

描述您的最终目标通常很有用。实际上,您已决定解决问题的方法是编辑 MSI,但没有对该实际问题的描述。您似乎想修改现有的 MSI 以调用代码,但您不想使用可用工具重新构建它。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多