如何在InstallScript中从.NET dll调用方法

问题描述 投票:2回答:2

我需要在InstallScript中调用.NET dll中的函数。我该怎么做?

让我们从简单的HelloWorld开始吧。假设,我创建了简单的类库TestLibrary.dll

using System;
using System.Windows.Forms;

namespace TestLibrary
{
    public static class TestClass
    {
        public static void TestFunction()
        {
            MessageBox.Show("Hello!");
        }
    }
 }

我不想在目标框上安装这个dll,我只想在安装过程中运行TestFunction(),所以我只是在SupportFiles视图中添加了TestLibrary.dll(我使用InstallShield 2013 Professional,Basic MSI Project Type)。然后在InstallScript中我正在为它编写原型,加载TestLibrary.dll并尝试从中调用TestFunction。像这样的Smth:

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;

我有2个问题:只有当我使用硬编码的绝对路径调用UseDLL到TestLibrary.dll时,UseDLL返回0(0表示dll已成功加载)。第二个问题 - 假设,我成功加载了DLL。如何调用我的TestFunction并查看“Hello”消息框呢?

.net dll installshield installscript
2个回答
1
投票

UseDLL仅适用于非托管代码。对于.NET使用DotNetCoCreateObject。但说实话,对于MSI项目,我会完全跳过InstallScript并直接使用C#。 Windows Installer XML(WiX)具有一个名为Deployment Tools Foundation(DTF)的功能,可以构建与Windows Installer兼容的托管自定义操作。输出DLL看起来像Windows Installer的传统Win32 DLL,并与InstallShield兼容。


1
投票

如果您为.dll编写了C#代码,则不建议使用安装脚本,而是通过右键单击“自定义操作”创建存储在二进制表中的“新托管代码”。

在程序集文件中 - 指定要在此CA中使用的.dll文件或.exe。

在方法签名中 - 单击省略号按钮,然后选择您的DLL中使用的类名,方法名和参数。在参数值中,您还可以选择属性名称。在返回属性中,您可以指定一个属性,用于存储和显示.dll的返回值。点击确定。

现在,您可以在需要时调用此自定义操作。这将调用.dll的功能并解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.