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

标签 .net dll installshield installscript

我需要从 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/

相关文章:

runtime-error - 如何防止 InstallShield 1158 错误?

windows - 查看用户名是否在administrator组

c# - 以编程方式取消订阅 YouTube 用户 C#

.net - 在 opencv 中查找视频帧的熵时出现奇怪的输出

windows - 如何正确包含 windows.h 并将最低版本设置为 XP

c# - 警告 : Can't find dll

c# - LINQ to SQL DataContext.Translate 和名称与源名称不同的属性

c# - 通过不同环境的代码检查 32 位?

java - 使用 IKVM 生成的 DLL

sql-server-ce - SQL CE 4.0 作为 InstallShield 先决条件