gpt4 book ai didi

.net - 如何在 InstallScript 中从 .NET DLL 调用方法

转载 作者:行者123 更新时间:2023-12-03 05:43:15 25 4
gpt4 key购买 nike

我需要从 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 的硬编码绝对路径调用 UseDLL 时,UseDLL 返回 0(0 表示 DLL 已成功加载) .dll。第二个问题-假设我成功加载了DLL。如何调用我的 TestFunction 并看到“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com