我需要从 InstallScript 中的 .NET DLL 调用函数。我该怎么做?
让我们从简单的 Hello World 开始。假设我创建了简单的类库 TestLibrary.dll
using System;
using System.Windows.Forms;
namespace TestLibrary
{
public static class TestClass
{
public static void TestFunction()
{
MessageBox.Show("Hello!");
}
}
}
我不想在目标机器上安装这个DLL,我只想在安装过程中运行TestFunction()
,所以我只添加了TestLibrary.dll
在 SupportFiles View 中(我使用 InstallShield 2013 Professional,基本 MSI 项目类型)。然后在 InstallScript 中,我为其编写原型(prototype),加载 TestLibrary.dll 并尝试从中调用 TestFunction。像这样的事情:
export prototype TestDllFunction(HWND); //call in Custom Action
prototype TestLibrary.TestFunction();
.......
function TestDllFunction(hMSI)
NUMBER Result;
begin
Result = UseDLL(SUPPORTDIR ^ "TestLibrary.dll");
TestLibrary.TestFunction();
Result = UnUseDLL("TestLibrary.dll");
end;
这里有两个问题:仅当我使用 TestLibrary 的硬编码绝对路径调用
。第二个问题-假设我成功加载了DLL。如何调用我的 UseDLL
时,UseDLL
返回 0(0 表示 DLL 已成功加载) .dllTestFunction
并看到“Hello”消息框?
最佳答案
UseDLL 仅适用于非托管代码。对于 .NET 使用 DotNetCoCreateObject 。但说实话,对于 MSI 项目,我会完全跳过 InstallScript 并直接使用 C#。 Windows Installer XML (WiX) 具有称为部署工具基础 (DTF) 的功能,该功能使构建与 Windows Installer 兼容的托管自定义操作成为可能。对于 Windows Installer 来说,输出 DLL 看起来像传统的 Win32 DLL,并且与 InstallShield 兼容。
关于.net - 如何在 InstallScript 中从 .NET DLL 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21477323/