而在执行安装前我们可以通过使用 Inno Setup 检测当前系统中运行的进程,如果有用户在执行了某些进程,那么通过该检测就可以有效的提示用户先关闭进程后再执行安装。...而在执行安装前我们可以通过使用 Inno Setup 检测当前系统中运行的进程,如果有用户在执行了某些进程,那么通过该检测就可以有效的提示用户先关闭进程后再执行安装。...这样在安装软件的时候就不会因为有相关进程拦截或者出现冲突而导致安装错误。...以下是大眼仔旭收集的详细的 Inno Setup 检测运行进程并提示结束解决方案代码,您可以根据自己的需要复制到 Inno Setup 脚本中合理使用即可。...1.5 DefaultDirName={pf}\My Program OutputDir=userdocs:Inno Setup Examples Output Compression=lzma/ultra
去官网下载Inno Setup打包工具 点击 Inno Setup Downloads[1] 下载: 如果有中文需求,则需下载中文包,下载地址:Inno Setup Translations[2]...安装包语言选择 官方默认是不提供中文语言包的,但官网上有第三方用户提供和维护了中文包,有需要的可以在 Inno Setup Translations[3]下载,然后手动放进Inno Setup安装目录下的...start explorer /select,"$(SolutionDir)DevOps\Publish\" ) 为防止影响调试,可以加个判断,只有Release模式编译项目则执行命令,该命令的意思就是通过调用解决方案下的...如果在实际操作中遇到错误或有疑问,以及更好的建议可以在评论中交流.. 6....附录 Inno Setup官网:https://jrsoftware.org/ Inno Setup编辑器:https://jrsoftware.org/isdl.php Inno Setup语言包:https
现在我们还缺少第 4 步“创建安装包”,这篇文章将讲解如何在 Azure Pipelines 中使用 Inno Setup 创建安装包。 2. 使用 Inno Setup 创建安装包 ?...我的公司通常使用 Inno Setup 制作安装包,在 Azure Pipelines 中使用 Inno Setup 也十分简单,于是这篇文章将使用 Inno Setup 作为制作安装包的例子。...Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!...在 Azure Pipelines 上运行 Inno Setup 把 SetupScript.iss 推送到 Azure Repos 上,然后修改对应的 Pipeline。...Pipeline 中需要添加两个任务: 一个负责使用 Chocolatey 下载并安装 Inno Setup 的任务 一个调用 Inno Setup 运行 SetupScript.iss 的任务 然后修改
本来用inno setup来做一个安装包,顶多就是一个多目录安装的问题。但是,公司发布的插件只能应用在Win64位平台,而且要求通过读取注册表来确定具体的安装目录。这是背景,也正是本文要说坑。...二、分析过程 本来拿到需求一想还挺简单的,本来就详细看过Inno setup的文档,读取注册表只需要调用RegQueryStringValue()即可读取注册表中指定项目。...事实上,在inno setup的说明文档中还有另外一种方法可以尝试,也可以避免64bit系统产生的问题。...topic=consts 3、http://stackoverflow.com/questions/4033976/inno-setup-doesnt-allow-access-to-all-registry-keys-why...//stackoverflow.com/questions/32727865/how-to-install-sys-file-into-c-windows-system32-drivers-with-inno-setup
如果选了,在批处理文件中的其他命令就会因为计算机重启动而无法执行。...六、Inno Setup 使用 Inno 技术制成的程序安装包可以使用 /SILENT 和 /VERYSILENT 参数进行静默安装。...我们可以通过使用一个参数跳过这个对话框: setup.exe /silent /suppressmsgboxes 有些利用 Inno 技术做作的安装包会在程序安装完毕后自动运行所安装的程序,例如:ISOBuster...Inno Setup 制作的安装文件,请使用下面的明显,安装完直接重启: setup.exe /sp- /silent /norestart 如何判断哪个安装程序是用 Inno 技术打包的?...在本文就和广大爱好者一起研究一下几种常见软件封包形式的静默安装方式,如有遗漏和错误之处,请指出,大家互相交流!
在制作安装包的时候,可以在 Inno Setup 安装包脚本的 Run 里面添加在解压缩安装包文件完成之后,整个安装结束之前执行指定的命令,是作为定制化最高的内容 有小伙伴觉得安装包脚本比较难写,也不熟悉...推荐的方法是自己写安装辅助 exe 程序,在安装包解压缩完成之后调用辅助安装程序,这样安装逻辑可以放在安装程序,而安装程序本身可以使用自己熟悉的语言开发 在 Inno Setup 安装包脚本,可以在 Run...,不会显示控制台界面 用上此标记可以在安装完成之前调用批处理程序时,不会让安装包调用时显示控制台界面 runmaximized 让调用的程序最大化 runminimized 让调用的程序最小化 shellexec...在传入的文件不是可执行文件时,可以加上这个标记 skipifdoesntexist 如果传入的文件不存在,那么什么都不做就跳过 skipifnotsilent 如果当前不是静默安装模式,那么跳过 在 Inno...等待调用的命令暂停或退出 如果以上内容有不明白的,请点击官方文档 Inno Setup Help
打开Inno Setup安装目录,默认C:\Program Files (x86)\Inno Setup 6。...复制Default.isl,将其拷贝至C:\Program Files (x86)\Inno Setup 6\Languages文件夹,并重命名为Chinese.isl 将以下内容覆盖到Chinese.isl...; *** Inno Setup version 5.5.0+ Chinese messages *** ; ; To download user-contributed translations...AssocingFileExtension=正在用文件扩展名 %2 匹配[&A] %1 中... 7.打包 打开Inno Setup,通过右上角File->New新建Inno Setup打包文件。...Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
环境Python 3.8Tkinter (自带)pyinstaller 6.3.0Inno Setup Compiler基本流程用 conda 单独创建一虚拟环境,比如写一个 tkinter 应用,对了为了好看...然后用 pyinstaller 将应用打成文件包 (含 exe),最后用 Inno Setup Compiler 打成安装包,里面就是各种文件关联,图标和信息的设置了。...self.msg_text.delete(1.0, tk.END) self.msg_text.insert(tk.END, oldDirPath) # '如果是文件夹则递归调用...Setup Compiler 也就是对这个文件夹打包。...Inno Setup Compiler 操作新建脚本,填写信息选择主程序和需要的文件设置名称和 icon选择导出位置 (前面还有协议等设置)运行脚本开始生成安装打开,安装目录里有自带卸载程序
\jdk(11配jdk),jdk11即使按需生成jre打包后的exe也无法运行 到这里exe已经打包好了,可以放到你本地jdk/jre(同理前面配置的..../jdk环境放到jdk) 目录下试运行,如果没有问题接下来就将exe和运行环境jre打包成安装包 制作安装包 inno setup,一个将依赖和exe一起打成一个安装程序的工具,链接: https://...pan.baidu.com/s/1DgFo1ceM_8Bqx_b-veibbQ 提取码:g9jd 打开inno setup,左上角File - New 中间的选项直接下一步,直到这个页面填入输出位置和程序名称...然后下一步,进入这个界面保持默认,只修改箭头标记位置将{app}修改为{app}/jre 点击绿色小三角运行脚本,当绿色滚动条结束后,桌面会多了一个setup.exe文件 双击安装包进行安装,
当时数据库自动重启,未对生产造成影响,未做处理,但是还是记录了下错误信息,错误日志中有如下信息: InnoDB: End of page dump InnoDB: Page may be an index...2问题分析 一般来说,数据页损坏,错误日志中都会显示具体的 page number,其他情况暂不考虑。...在此前提下,根据实例状态可以将数据页损坏分为以下两种场景: 实例能正常启动 实例无法正常启动 场景不同,处理方法也略有不同,下面分别展开详细分析: 场景一:实例能正常启动 此时借助通过错误日志中的信息,...当紧急情况下实例无法正常启动时可以尝试将其设置为 >0 的值,强制拉起实例然后将数据逻辑备份导出进行恢复。...更多参考[6] 如果 InnoDB 表文件中的 page 损坏,导致实例无法启动,可以尝试通过该工具进行修复,如果损坏的只是 leaf page,inno_space 可以将 corrupt page
cefsharp需要另开一个C#项目 2.更新 electron团队专门开发了自动更新的组件,而且有热更新,这个比cefsharp更有优势,C#项目当然也有自动更新,也可以自定义实现 3.打包 二者都可以通过inno...setup打包 4.硬件交互 C#更有优势,可以调用大量系统api或者第三方dll,electron可以调用C++的dll,在系统api层面支持没有C#强,在打印方面,串口打印,端口打印,还是C#支持更好
2026 年 2 月起持续活跃的蓝闪行动(Operation BlueDash),以伪造 Microsoft Teams 安全文档更新为钓鱼诱饵,通过 Inno Setup 封装加载器静默部署 Level...2.3 第三阶段:Inno Setup 封装加载器静默启动隐藏 PowerShell用户执行 supportdev.exe 程序,该文件基于 Inno Setup 打包工具封装,具备标准安装程序外观,运行时前台展示正常安装进度窗口...加载器核心规避逻辑分为两层:一是前台正常安装界面掩盖后台恶意操作,普通用户观察不到隐藏脚本执行;二是依托 Inno Setup 正规安装包格式,部分终端安全工具对标准安装程序放行,不触发进程拦截规则。...隐藏 PowerShell 进程行为告警规则EDR 终端安全产品配置专项监控规则:检测无窗口、后台静默启动的 PowerShell 进程,同时匹配进程父程序为 Inno Setup 安装包时,立即触发高危告警并阻断进程运行...7 结论与行业威胁演化展望7.1 研究结论本文以蓝闪行动(Operation BlueDash)完整攻击情报为核心研究样本,系统拆解该钓鱼攻击依托 Teams 协作软件诱饵、Inno Setup 恶意加载器
压缩包内的核心文件是一个基于 Inno Setup 制作的安装程序。...Inno Setup 是一款广泛使用的免费安装程序制作工具,其生成的安装包具有合法的程序结构,本身不具备明显的恶意特征,能够绕过部分基于文件格式的静态检测。...选择 Inno Setup 作为初始载荷的封装形式,具有多重技术优势。...当受害者解压压缩包并运行 Inno Setup 安装程序后,攻击进入第一阶段执行。...同时,应当对附件中的 Inno Setup 安装程序进行重点检测,因为此类安装程序常被用于恶意软件的初始封装。第二,建立本地化钓鱼诱饵的特征库。
本文以 ZeroBEC 团队披露的 BlueDash 行动完整攻击链路、基础设施特征、后置渗透行为为核心研究素材,系统拆解该行动的邮件社工设计、仿官方钓鱼站点构造、Inno Setup 加载器隐蔽执行、...页面下载文件命名完全贴合页面叙事,标注为 Teams 客户端更新安装包,文件本体为 Inno Setup 封装的 supportdev.exe 加载器,封装外壳具备标准安装程序可视化窗口,模拟正常软件解压...BlueDash攻击链路总图3.3 第三阶段:Inno Setup 加载器隐蔽执行与多级载荷下发supportdev.exe 作为整个攻击链路的核心中转加载器,基于 Inno Setup 安装打包工具开发...Inno Setup 打包脚本内置静默执行指令,程序启动后同步创建隐藏后台进程,调用系统原生 PowerShell 解释器,全程不弹出任何命令行窗口,避免用户发现异常终端;PowerShell 脚本执行权限调用系统默认用户权限...6 结论与研究展望6.1 研究结论本文以 ZeroBEC 披露的 BlueDash 多 RMM 职场钓鱼行动为完整研究样本,系统拆解该攻击从社工邮件分发、仿官方钓鱼页面跳转、Inno Setup 加载器隐蔽执行
步骤1:准备应用程序 在发布应用程序之前,确保你的应用程序已经经过充分测试,并且没有明显的错误。此外,你还需要考虑以下几个方面: 1.1 处理依赖关系 确保你的应用程序所需的所有依赖关系都已正确安装。...2.3 使用其他工具 除了 cx_Freeze 和 PyInstaller 之外,还有其他一些工具可用于创建安装程序,如 Inno Setup 、 NSIS ( Nullsoft Scriptable...创建一个 Windows Installer ( MSI )文件或使用 Inno Setup 等工具来创建安装程序。这样用户可以轻松地安装和卸载应用程序。...将应用程序打包为可执行文件: pyinstaller --onefile hello_app.py 然后,我们在不同的平台上发布应用程序: 对于 Windows ,我们可以创建一个安装程序(例如:hello_app_setup
体积更小:32位 electron 比 64位小30MB,用 inno setup 打的安装包也要小10MB 更兼容:32位 版本兼容 64位系统 第三方库只有32位的,要求Electron必须为32位...electron-builder --win --armv7l 其中: ia32, 即–arch=ia32, 32位操作系统,也可以在64位操作系统中安装 x64, 即–arch=x64, 64位操作系统,使用本架构打包无法再
默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。...在上面的例子中,proc3、proc4、proc5被Shell放到同一个前台进程组,其中有一个进程是该进程组的Leader,Shell调用wait等待它们运行结束。...但是注意,如果proc3、proc4、proc5中的某个进程又fork出子进程,子进程也属于同一进程组,但是Shell并不知道子进程的存在,也不会调用wait等待它结束。...四、创建守护进程步骤 调用fork(),创建新进程,它会是将来的守护进程 在父进程中调用exit,保证子进程不是进程组组长 调用setsid创建新的会话期 将当前目录改为根目录 将标准输入、标准输出...、标准错误重定向到/dev/null 成功调用setsid函数的结果是: 创建一个新的Session,当前进程成为Session Leader,当前进程的id就是Session的id。
就不赘述了,在这里,我主要说下我在使用过程种遇到的问题 1.环境要求 .net framework 4.5.2 以及 和 VC++ 2015 runtime (x86/x64) ,这两个环境,我是在用Inno...Setup 打包的时候通过脚本判断安装的 C++的运行环境和CefSharp的版本有关,我用的是65的版本,最低要求VC++2015 2.C#和JS的交互 JS调用C#很简单,通过browser.RegisterJsObject...(参数1, 参数2),参数2为C#种实例类的对象,参数1为C#中可以直接访问的对象,js中通过 参数1.方法,调用方法或属性,vue框架全局都可以访问。...但是C#调用JS,一种方式是把js中的方法和变量开放到打包好的index.html中,我在Vue中没有找到对应的方法,如果谁有方法,可以写在留言里。...于是采用了一个笨方法,通过browser.EvaluateScriptAsync("Js代码")拿到标签中的值,或执行html标签上绑定的方法,如果没有对应标签,写一个隐藏的标签,可以通过这种方式,达到C#与js的互相调用
= 0) { //调用 setup_stack() 函数为进程分配一个内核栈 goto bad_fork_cleanup_proc; //返回 } if (copy_mm...该函数主要完成的工作如下: 1、调用 mm_create 函数来申请进程的内存管理数据结构 mm 所需内存空间,并对 mm 进行初始化; 2、调用 setup_pgdir 来申请一个页目录表所需的一个页大小的内存空间...分配内存失败 goto fork_out; //返回 } proc->parent = current; //设置父进程名字 if (setup_kstack(proc...->do_wait->do_exit SYS_getpid get the process's pid 一般来说,用户进程只能执行一般的指令,无法执行特权指令。...如果 make grade 无法满分,尝试注释掉 tools/grade.sh 的 221 行到 233 行(在前面加上“#”)。
proc = alloc_proc(); // 为要创建的新的线程分配线程控制块的空间 if (proc == NULL) goto fork_out; // 判断是否分配到内存空间 assert(setup_kstack...;//返回 } proc->parent = current; //将子进程的父节点设置为当前进程 if (setup_kstack(proc) !...= 0) { //调用 setup_stack() 函数为进程分配一个内核栈 goto bad_fork_cleanup_proc; //返回 } if (copy_mm...该语句的左右是关闭中断,使得在这个语句块内的内容不会被中断打断,是一个原子操作; 这就使得某些关键的代码不会被打断,从而不会一起不必要的错误; 比如说在 proc_run 函数中,将 current 指向了要切换到的线程...,但是此时还没有真正将控制权转移过去,如果在这个时候出现中断打断这些操作,就会出现 current 中保存的并不是正在运行的线程的中断控制块,从而出现错误; 运行结果如下: ?