因为公司有个需求,需要一个安装包,只允许在一台电脑上安装,安装了之后,就无法在其他电脑安装了,我就想到了加密狗,于是就淘宝了一个safenet的超级狗superdog。
通过c#编写一个dll
先将目标框架改为 .net framework3.5,再将Assembly.cs中的comVisible的false改为true。
namespace XXXXXXX
{
public class XXXXXXX
{
public bool GetSuperDog()
{
bool flag = false;
string text = null;
MyClass myclass = new MyClass();
using (Dog dog = new Dog(new DogFeature(DogNumber)))
{
SuperDog.DogStatus status = dog.Login(VendorCode.Code);
if (status == SuperDog.DogStatus.StatusOk)
{
//弄个数据文件
DogFile file = dog.GetFile(FileNumber);
status = file.Read(ref text);
if (status == SuperDog.DogStatus.StatusOk)
{
if (//自己判断)
{
status = file.Write(myclass.getPassWord());
if (status == SuperDog.DogStatus.StatusOk)
{
flag = true;
}
}
else
{
if (myclass.getPassWord() == text)
{
flag = true;
}
}
}
}
dog.Logout();
}
return flag;
}
}
public class MyClass
{
public string getPassWord()
{
//具体实现就不写了
return null;
}
}
}
在InstallShield中使用
首先添加下列这些文件
在installScript中调用dll
在installScript中开始的地方,我放在了Dlg_Start下。注意:打包的安装程序有依赖的,就是上图的这些dll,需要安装下windir下,因此,调用c#的dll之前需要将dll拷贝到%systemroot%下。
XCopyFile(SUPPORTDIR^"*.dll",WINDIR ,COMP_NORMAL);
havedog = CheckSuperDog();
if(havedog = FALSE) then
MessageBox( "XXXXX", SEVERE );
abort;
endif;
prototype GetSuperDog();
function GetSuperDog()
string szDllPath;
object oMyTest;
begin
szDllPath= SUPPORTDIR^"XXXXXXX.dll"; //dll文件路径
set oMyTest=CoCreateObjectDotNet(szDllPath,"XXXXXXX.XXXXXXX") ;//后面的字符串为命名空间
if(oMyTest.GetSuperDog()) then
return TRUE;
else
return FALSE;
endif;
end;