Inno Setup 以字符串为参数调用DLL
当我尝试使用Inno设置脚本的DLL时,我会得到一个例外. 我认为问题是DLL代码中的这一行: StreamReader sreader = new StreamReader(newpath); 如果我将路径用作@"D:\source.txt",则不会崩溃. 代表source.txt文件路径的字符串应该像从脚本中传递时看起来像是什么? ? dll代码: using RGiesecke.DllExport; using System.Runtime.InteropServices; using Microsoft.Win32; using System.IO; using System; using System.Text; namespace DotNet64 { public class InnSetDLL { [DllExport("test", CallingConvention = CallingConvention.Std
22 2024-04-17
编程技术问答社区
Inno Setup-External .NET DLL with dependencies
我试图在安装过程中使用Inno设置脚本中的自定义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();
14 2024-04-14
编程技术问答社区
如何在Inno Setup中卸载时执行批处理文件?
我正在使用现在,我想执行它们当用户单击"是"以卸载时,但是找不到方法.它在确认之前执行 这是我的代码[Code]部分: function InitializeUninstall(): Boolean; var ResultCode : Integer; begin Result := True; Exec(ExpandConstant('{app}\scripts\unset.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); end; 解决方案 将代码移至 .该事件在确认卸载后触发 procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var ResultCode : Integer; begin if CurUninstallStep = usUninstal
20 2024-03-29
编程技术问答社区
Inno Setup-从外部来源(文件或文件夹内容)创建一个动态的组件/类型列表。
我有一个批处理文件(设置更改器),该文件使用Xcopy列出特定文件夹中的特定文件格式,然后允许我输入其中一个名称,脚本使用该名称将该文件复制到另一个位置./p> 首先,xCopy创建原始副本作为备份(滚动备份仅1副本),然后文件副本(扩展名在批处理中仅固定在批处理中,只有文件名才需要此功能,但我会做得很好,但是我会喜欢尝试在Inno设置中进行此操作,以进行漂亮的干净GUI. 我想从特定固定文件夹中的文件列表中填充组件/类型的列表.甚至在(额外的步骤,但也许更好的控件)中创建一个具有这些名称的INI文件.可能阻止这种情况可能无法实现的主要问题是不知道这是一个数组的条目.如果只有1个条目或文件仅1个选项(1或a),则如果4,则用户可以选择1个中的1个(a,b,c或d).我会提取文件名来创建名称/描述. 然后完成后,与我的批处理相同的任务,备份(始终始终与start.ini等相同的名称),然后复制文件,例如example1.ini和oftrite start.ini ini
2 2024-03-29
编程技术问答社区
在Inno Setup(Inno Setup的Unicode版本)中将字符串编码为Base64。
问题 我尝试使用pascal函数EncodeStringBase64,假设Inno设置可以访问Pascal Standard Library,但未能找到它并提供Unknown Identifier错误. /fcl/base64/encodestringbase64.html 我还发现此代码可以进行转换,但似乎仅限于Ansistrings. /Master/windows/base64.iss 问题 理想情况下,我想使用标准库功能,有什么办法可以访问它? 如果不是,如果我更改签名,则使用ANSISTRINGS的代码可以安全地在普通Unicode字符串上使用? 我将为此进行测试,但是我担心我会测试大量用例,但这并不能保证它实际上适合每个角色和边缘案例可能存在. 解决方案 base64编码字节,而不是字符(字符串).这也可能是您发现的Encode64实现的原因,为什么要AnsiString. AnsiString通常(AB)在Inno设置
38 2024-03-27
编程技术问答社区
当用户确认卸载时,如何保存一个文件夹?(Inno Setup)
当用户确认应用程序卸载时,如何将特定文件夹的备份副本保存到用户桌面? 时 我在没有成功的情况下尝试了这一点...也许有一种不使用代码的方法可以做到这一点... procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usUninstall then begin FileCopy('{app}\Profile\*', '{userdesktop}\Backup\Profile\', False); end; end; 谢谢你们! :) 解决方案 在CurUninstallStepChanged(usUninstall)上触发备份是最好的解决方案. 您遇到的问题是: 为此,请参见 inno设置:复制文件夹,子文件夹,子文件夹和文件,在代码部分中递归 . 您必须使用解决{app}和{userdesk
10 2024-03-27
编程技术问答社区
无法使用Inno Setup查找文件中的字符串并将其填充?
我有demo.properties文件,我可以加载文件并迭代以获取所有值. hibernate.connection.username=jack hibernate.connection.password=queen hibernate.connection.url=jdbc:jtds:sqlserver://localhost/cabinet 但是,当我获得第1行(能够逐行获取但无法获得特定的字符串)时,我想填充插孔并将其存储到用户名中类似的Queen将密码字符串和Localhost添加到数据库字符串中.这是我的代码/获得值的逻辑. procedure InitializeWizard; var xmlInhalt: TArrayOfString; k : Integer; CurrentLine : String; Uname : String; Password : String; HostName : String;
12 2024-03-06
编程技术问答社区
如何在const中定义一个数组?
我在Inno设置的"代码"部分下的const中定义一系列字符串时遇到了一些问题,我有以下内容: [Code] const listvar: array [0..4] of string = ('one', 'two', 'three', 'four', 'five'); 是说我需要一个= :在哪里,但是我无法将其定义为数组. 解决方案 我在不久前做出了一些实用程序功能.它不允许您在常数上分配一个数组,但是它可以为一个衬里中的变量提供技巧.希望这个帮助. 您可以这样使用: listvar := Split('one,two,three,four,five', ','); { ============================================================================ } { Split()
4 2024-03-05
编程技术问答社区
PascalScript是否与Delphi XE5兼容,以创建Android/iOS/Windows应用程序?
我想创建一个将根据JSON数据绘制简单表格的应用程序.我需要有一个脚本来对此进行智能. remobject的pascal脚本是为此解决方案吗? 与Android,iOS和Windows相同的源代码生成应用程序? 编辑:扩展到更好地理解需求:我有一个绘制表单的Delphi程序(几乎像DFM文件一样,作为描述符),并在数据库中填写数据.但是,有必要实力验证输入的数据.由于表单和数据以及验证规则是由用户完成的,因此无法成为"常规" Pascal源代码.因为脚本语言将是完美的,并且由于我需要相同的形式,并且在每个平台中都可以使用相同的脚本,因此我可以弄清楚应用程序也是完美的. 此脚本语言应该能够与暴露对象一起使用并处理数据库操作(通过暴露对象也应起作用),这不仅是一个简单的IF语句,而且不需要类定义.基本上,当IDE归因于onClick for tbutton时,在Delphi事件中可以执行的操作的概念基本相同.它可以验证字段,计算总数,保存到数据库. 编辑:我发现
8 2024-02-07
编程技术问答社区
搜索Inno Setup DestDir的子目录
我正在尝试使用Inno设置来分发由另一个应用程序用作插件的文件.如果找不到插件目的地,它仍应安装在程序文件目录中,为用户提供手动说明. 向 Tlama 提供类似问题中使用的一些代码: inno设置查找子文件夹. 关注脚本列出了我希望实现的基本设置,并在脚本不完整的情况下进行评论.我只是在我的头上. : - ) 如何将发现的目录传递回StampTargetDir(当前只是MSGBOX) 如何在指定目录名称(即'stamps')下搜索所有子目录 如何将所有子目录(#2)的搜索限制为生活在{pf}>>或{localappdata}中的几个名为子目录(即" Adob​​e"和" Acrobat") 在[Files]下进行文件插件安装,以找到"邮票"目录. P.S.我知道搜索有一些明显的缺点.但是,"邮票"目录不太可能在其他领域使用(请参见#3). [Files] ; Install all the files in a user specified
28 2024-01-09
编程技术问答社区
如何执行7zip而不阻塞Inno Setup UI?
我的Inno设置GUI在解压缩操作过程中被冻结. 我有一个procedure DoUnzip(source: String; targetdir: String) core unzipTool := ExpandConstant('{tmp}\7za.exe'); Exec(unzipTool, ' x "' + source + '" -o"' + targetdir + '" -y', '', SW_HIDE, ewWaitUntilTerminated, ReturnCode); 此过程被多次称为Exec操作会阻止用户界面.在执行之间只有很短的时刻,Inno GUI是可拖动/可移动的. 我知道TExecWait还有其他选项,而不是ewWaitUntilTerminated,例如ewNoWait和ewWaitUntilIdle,但不幸的是,它们在这种情况下没有帮助.使用ewNoWait将同时执行多个UNZIP操作. 我正在寻找一种执行外部解压缩
30 2024-01-09
编程技术问答社区
如何在单个Inno Setup安装程序中添加x86和x64 VC++ 2019的再分配程序?
我正在尝试在单个设置中添加架构[x32和x64] VC ++ 2019(v14.26.28720.03).我成功地编译了,但是在运行时我在ExtractTemporaryFile('#VcInstall'); 中得到了例外 ;Version: v14.26.28720.03 [Setup] #if arch == "x32" #define VcInstall "VC_redist.x86.exe" #else #define VcInstall "VC_redist.x64.exe" #endif [Files] Source: ".\Redist\{#VcInstall}"; DestDir: {tmp}; Flags: dontcopy [Run] Filename: "{tmp}\{#VcInstall}"; Parameters: "/q /norestart"; \ Check: VC2019RedistNeedsInstall; Flags: wai
14 2024-01-08
编程技术问答社区
如何在Inno Setup中检查64/32位
我想进入文件夹.如果64位Program Files,则为Program Files (x86),如果32位.如何在Inno设置中执行此操作. 这是我尝试过的代码(但没有运气): procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep); var mres : integer; begin case CurUninstallStep of usPostUninstall: begin mres := MsgBox('Do you want to delete saved games?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) if mres = IDYES then if ProcessorArchitecture = paIA64 then be
10 2024-01-08
编程技术问答社区
如何用Inno Setup检查一个进程是否在Windows 2008 R2 64bit上运行?
我已经阅读了以下文章.我的代码看起来完全相同,但不起作用: inno设置检查运行过程 我从但是,即使我更改了这样的代码,示例也不起作用: [Code] function IsModuleLoaded(modulename: AnsiString): Boolean; external 'IsModuleLoaded@files:psvince.dll stdcall'; 代码始终返回false(即使程序正在运行,程序也没有运行). 在Windows 2008 R2和Windows 7中进行了测试. 实际上,我想检查tomcat5.exe是否正在运行.所以我想我不能使用AppMutex. 我还曾看过 完成代码: [Files] Source: psvince.dll; Flags: dontcopy [Code] function IsModuleLoaded(modulename: AnsiString ): Boolean; external
18 2024-01-08
编程技术问答社区
在Inno Setup中检索.NET程序集的强大名称
我需要将这些一些DLL文件安装到GAC. 我使用预处理器来生成这些DLL的[Files]部分条目.我需要为StrongAssemblyName参数提供值. 所以问题 我可以从pascal脚本自动检索dll的StrongAssemblyName吗? 如果不是,可以创建一个字典,以便我可以在字典中使用汇编名称作为键查找,然后具有硬编码的值字符串 Source: path; DestDir 如果可能的话,我更喜欢第一个解决方案. 解决方案 我不认为,有一种本地方法可以在Inno设置Pascal脚本中检索一个强名. 但是,您可以使用简单的PowerShell命令来检索强名. ([Reflection.Assembly]::ReflectionOnlyLoadFrom('My.dll')).FullName 结合这两个问题: 我如何看到我的组装的强名? 如何在Inno设置中获取执行程序的输出? 您获得了一个代码: functio
8 2024-01-08
编程技术问答社区
在用Inno Setup安装时报告已安装的.NET框架版本
我正在尝试Inno设置,以准备创建安装程序.我的第一个尝试是向当前安装.NET Framework的用户报告.我想出了以下脚本,该脚本安装了令牌exe,但它没有显示我要显示已安装的框架版本的消息框. [Setup] AppName=NETFramework_Test AppVersion=1.0.0 DefaultDirName=c:\al\NetFWTest\test WizardStyle=modern OutputDir=c:\al\NetFWTest [Files] Source: "c:\al\computer\miscsmallapps\tmpdir\tmpdir.exe"; DestDir: "{app}"; [Code] var VersionNum: cardinal; begin if RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full',
6 2024-01-06
编程技术问答社区
在Inno Setup中,"检查 "功能被多次执行。
我是Inno设置脚本的新手,我正在尝试使用以下代码作为先决条件来安装.NET Framework 3.5. Check函数多次执行.有人可以帮我理解为什么吗? 注意:以下代码中的所有其他部分(Setup,Icons等)都有适当的内容. [Files] Source: "Frameworks\dotnetfx35setup.exe"; DestDir: {tmp}; Flags: deleteafterinstall; \ BeforeInstall: Install35Framework; Check: Framework35IsNotInstalled [Code] function IsDotNetDetected(version: string; service: Cardinal): boolean; begin Result := { ... }; end; function Framework35IsNotInstalled: Boolean;
8 2024-01-05
编程技术问答社区
如何让Inno Setup解压缩单个文件?
有没有一种方法可以从zip中解开一个文件? 我正在使用基于 wesponse "作为一个安装过程的一部分),非常适合UNZIP,但没有一个想法可以解压缩一个文件: [Code]: const NO_PROGRESS_BOX = 4; RESPOND_YES_TO_ALL = 16; procedure UnZip(ZipPath, TargetPath: string); var Shell: Variant; ZipFile: Variant; TargetFolder: Variant; begin Shell := CreateOleObject('Shell.Application'); ZipFile := Shell.NameSpace(ZipPath); if VarIsClear(ZipFile) then RaiseException(Format('ZIP file "%s" does not exist or c
14 2023-12-26
编程技术问答社区
如何在Inno Setup中根据其子标签的值来选择XML标签
我正在尝试在XML元素的子元素中搜索文本" libra esterlina",并检索其他子元素的值.但是我的查询一无所获. 我的代码基于 wesponse 来自如何读取多个XML节点? (Inno设置)和 warmys 来自 xpath:如何基于其价值选择元素? function LoadValuesFromXMLMoneda(FileName: string): Boolean; var XMLNode: Variant; XMLNodeList: Variant; XMLDocument: Variant; Index: Integer; id, moneda, dollar, abr, singPlur, caracter : String; begin XMLDocument := CreateOleObject('Msxml2.DOMDocument.6.0'); try XMLDocument.async := False;
24 2023-12-22
编程技术问答社区