2013-08-02 2 views
3

J'ai créé une DLL .NET à utiliser dans Openscript. Il installe essentiellement des certificats, supprime des certificats et vérifie si un certificat existe déjà. Ceci est ma méthode Exists:Utilisation de valeurs de retour booléennes dans une DLL .NET utilisée dans InstallScript

[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) 
    { 
     ... 
    } 
} 

C'est le code 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; 

Dans cet exemple nReturn est toujours -1 quand je debug dans InstallScript, si le certificat existe ou non. (bien sûr à partir d'un programme .NET cela fonctionne bien) Ensuite, j'ai essayé d'utiliser un int comme valeur de retour et cela a fonctionné. Donc, il y a une solution de contournement.

Mais je me demandais si quelqu'un sait pourquoi je ne peux pas utiliser bool comme valeur de retour pour une DLL .NET qui est utilisée dans Openscript.

+0

Vous ne savez pas mais essayez simplement de renvoyer un entier à partir de la méthode 'Exists (string thumbPrint)'. Succès 0, sans succès -1 – PawanS

+0

Merci pour l'indice GAPS. J'ai fait quelques tests avec les valeurs 'int' de retour de .NET et les attraper dans une variable' BOOL' dans InstallScript et cela a fonctionné. – Rubanov

Répondre

3

Finalement, il s'est avéré assez simple. Installshield ne peut pas interpréter le champ booléen à partir de .NET. J'ai dû utiliser un int à la place.

Le programme .NET a dû retourner une valeur int: 1 pour TRUE et 0 pour FALSE (je sais assez standard)

Je mis la valeur de retour dans une variable BOOL InstallShield.

Questions connexes