Использование логических возвращаемых значений в.NET DLL, используемой в Installscript

Я создал.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)
    {
        ...
    }
}

Это код installscript

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 она работает нормально) Затем я попытался использовать int как возвращаемое значение, и это сработало. Так что есть обходной путь.

Но мне было интересно, если кто-нибудь знает, почему я не могу использовать bool в качестве возвращаемого значения для.NET DLL, которая используется в Installscript.

1 ответ

Решение

В итоге все оказалось довольно просто. Installshield не может интерпретировать логическое поле из.NET. Пришлось использовать вместо int.

Программа.NET должна была вернуть int значение:1 за TRUE а также 0 за FALSE (довольно стандартно я знаю)

Затем я устанавливаю возвращаемое значение в BOOL переменная в Installshield.

Другие вопросы по тегам