3

我创建了一个 .NET dll 以在 Installscript 中使用。它基本上安装证书,删除证书并检查证书是否已经存在。这是我的 Exists 方法:

[ComVisible(true)]
public bool Exists(string thumbPrint)
{
    try
    {
        ...
        //Check if the certificate exists on the store.
        var certCollection = store.Certificates.Find(X509FindType.FindByThumbprint, thumbPrint, false);
        return (certCollection.Count > 0);

    }
    catch (Exception exception)
    {
        ...
    }
}

这是安装脚本代码

szDLLPath = SUPPORTDIR ^ "X509Framework.dll";   
szClassName = "X509Framework.X509StoreProcessor";
DotNetUnloadAppDomain("X509FrameworkDomain");
try
    set oX509Store = DotNetCoCreateObject(szDLLPath, szClassName, "X509FrameworkDomain");
catch
    SprintfBox (INFORMATION, "Error","Error occured: %i\n\n%s\n\n%s", Err.Number, Err.Description, Err.LastDllError); 
    abort;
endcatch; 

try
    nReturn = oX509Store.Exists(FinArchCodeSigningSha);
catch
    SprintfBox (INFORMATION, "Error","Error occured: %i\n\n%s\n\n%s", Err.Number, Err.Description, Err.LastDllError); 
    abort;
endcatch;

在这个例子nReturn中,总是-1当我在 Installscript 中调试它时,证书是否存在。(当然,从 .NET 程序中它可以正常工作)然后我尝试使用 aint作为返回值,这很有效。所以有一个解决方法。

但我想知道是否有人知道为什么我不能将bool其用作 Installscript 中使用的 .NET dll 的返回值。

4

1 回答 1

3

最终,它变得非常简单。Installshield 无法解释来自 .NET 的布尔字段。不得不使用 int 代替。

.NET 程序必须返回一个int值: 1forTRUE0for FALSE(我知道这很标准)

然后我将返回值设置为BOOLInstallshield 中的一个变量。

于 2013-08-05T07:51:23.623 回答