Tag: inno setup

Inno Setup循环浏览文件并注册每个.NET dll

我正在使用Inno Setup创建一个安装文件,我需要使用regasm.exe文件注册未知数量的.net dll。 我知道我可以使用以下代码注册.net DLL。 [Run] Filename: “{dotnet20}\RegAsm.exe”; Parameters: /codebase MyDLL.dll; WorkingDir: {app}; StatusMsg: “Registering Controls.”; Flags: runminimized 我的问题是,文件夹中有多个dll,我不知道要注册的每个dll的名称。 有没有办法我可以遍历文件夹中的文件并注册其中的每个文件而不知道文件的数量和名称? 请帮忙,谢谢

Inno Setup – 具有依赖项的外部.NET DLL

我想在安装过程中在Inno Setup脚本中使用自定义DLL。 我写了一个非常简单的函数,它基本上使用MySQL .NET连接器检查MySQL数据库的连接字符串(目标服务器上没有MySQL客户端)。 这个导出函数的代码是: public class DbChecker { [DllExport(“CheckConnexion”, CallingConvention.StdCall)] public static int CheckConnexion([MarshalAs(UnmanagedType.LPStr)] string connexionString) { int success; try { MySqlConnection connection = new MySqlConnection(connexionString); connection.Open(); connection.Close(); success = 0; } catch (Exception) { success = 1; } return success; } } 该function在Inno Setup中以这种方式导入: [Files] Source: “..\..\MyDll\bin\x86\Release\*”; Flags: dontcopy; 和 [Code] function CheckConnexion(connexionString: […]

使用回调从Inno Setup调用C#DLL

我有一个正在运行的Inno Setup脚本,其中我使用Sherlock Software的innocallback.dll。 这个DLL包装了我的一个过程,以便它可以传递给C#DLL。 我不想使用这个DLL,我想直接调用我导出的C#方法并将回调过程传递给它。 我的问题是: 如何将我的Inno安装程序( @mycallback )传递给我的C#DLL,以便我可以将它用作我的delegate / UnmanagedFunctionPointer ? 正如我所说的这段代码有效,但我想尽量少用外部DLL。 这是我的代码: Inno安装脚本 type TTimerProc=procedure(); TProgressCallback=procedure(progress:Integer); function WrapProgressProc(callback:TProgressCallback; paramcount:integer):longword; external ‘wrapcallback@files:innocallback.dll stdcall’; function Test(callback:longword): String; external ‘Test@files:ExposeTestLibrary.dll stdcall’; var endProgram : Boolean; procedure mycallback(progress:Integer); begin MsgBox(IntToStr(progress), mbInformation, MB_OK); if progress > 15 then begin endProgram := True; end end; function InitializeSetup:boolean; var progCallBack […]

在下载时将用户特定数据嵌入到authenticode签名安装程序中

我有一个使用InnoSetup安装的Windows窗体应用程序,我的用户从我的网站下载。 他们将此软件安装到多台PC上。 该应用程序与Web API进行通信,该API必须能够识别用户。 我正在创建一个Web应用程序,用户可以登录并下载该应用程序。 我想在安装程序中嵌入一个通用唯一ID,这样他们就不必在安装后再次登录。 我希望他们下载并运行setup.exe,并让应用程序自行处理。 我正在考虑几个选项: 将用户特定的UUID嵌入到setup.exe中,并在Web服务器上按需执行代码签名 缺点:不知道怎么做? 将用户特定的UUID嵌入到安装程序文件的名称中(例如setup_08adfb12_2712_4f1e_8630_e202da352657.exe) 缺点:这不是很漂亮,如果重命名安装程序会失败 将安装程序和包含UUID的设置文件包装到自解压缩zip中 如何将用户特定数据嵌入到Web服务器上的已签名可执行文件中?

从非托管进程卸载.NET DLL

我正在使用我最好在托管DLL中的C#中实现的代码扩展我的Inno-Setup脚本。 我已经知道如何从托管DLL导出方法作为在非托管进程中使用的函数。 它可以通过IL编织来完成,并且有一些工具可以实现自动化: NetDllExport (由我编写) UnmanagedExports 因此,在导出后,我可以在Inno-Setup安装程序中从Pascal脚本调用我的函数。 但是有一个问题:DLL似乎不再被卸载了。 使用Inno-Setup的UnloadDLL(…)无效,文件将保持锁定状态,直到安装程序退出。 因此,安装程序等待2秒,然后无法从临时目录(或安装目录)中删除我的DLL文件。 事实上,它确实存在,直到有人清理驱动器。 我知道无法再从AppDomain卸载托管程序集,除非整个AppDomain关闭(进程退出)。 但是对于非托管主机进程意味着什么呢? 是否有更好的方法允许Inno-Setup在加载和使用后卸载或删除我的DLL文件?

从具有非托管导出的C#DLL返回字符串到Inno安装脚本

我有一个C#DLL,它使用Unmanaged Exports公开一个函数,它由Inno Setup Pascal脚本直接调用。 此函数需要将字符串返回给Inno Setup。 我的问题是如何实现这一目标? 我首选的方法是将Inno Setup中的缓冲区传递给C#函数,该函数将返回此缓冲区内的字符串。 我想出了这段代码: C#function: [DllExport(“Test”, CallingConvention = CallingConvention.StdCall)] static int Test([Out, MarshalAs(UnmanagedType.LPWStr)] out string strout) { strout = “teststr”; return strout.Length; } Inno安装脚本: function Test(var res: String):Integer; external ‘Test@files:testdll.dll stdcall’; procedure test1; var Res: String; l: Integer; begin SetLength(Res,256); l := Test(Res); { Uncommenting the following line causes […]

使用Inno Setup安装时,应用程序不起作用

我正在开发桌面数据库应用程序 使用rdlc报告和reportviewer。 在开发过程中一切都很好,reportviewer顺利地显示了所有数据。 我使用Inno Setup部署应用程序。 但是当我安装应用程序时,reportviewer没有显示数据。 数据正确插入表中。