开发独立EXE桌面应用程序,用什么语言、技术合适

开发独立EXE桌面应用程序,用什么语言、技术合适,第1张

您的要求可能看起来很低,但实现起来并不容易。 首先,Windows 本身甚至没有 C++ 运行时库,或者 msvcrt 不是 Windows 的一部分。 每个版本的windows可能都自带了msvcrt的一部分,但是xp vista win8 win10 win11自带了不同版本的msvcrt,也就是说,一旦依赖了msvcrt库,就不能保证在所有版本的windows上都能正常工作。换句话说,为了实现您的目标,您至少必须有一种静态链接基本 C/C++ 库的方法。 

为了解决这个问题,通常需要检查数据并更改参数。 比如这篇文章就是完整的数据。 甚至,说不定有人把这样的方法直接做成了工具。 但是你问“没有额外的第三方工具,没有代码和步骤”,那么好吧,这条路又被你挡住了。 至于高级语言,其实很多高级语言都是用C/C++开发或者执行的,所以Windows下的实际执行也依赖于msvcrt。 需要排除类似的语言方案。 因为,要想完全实现主体的思想,就必须摆脱msvcrt的依赖。 但是如果你想摆脱 msvcrt 依赖,要么需要一定的代码和步骤,要么需要第三方工具。 你不能同时使用两者,所以你不能这样做。 

然后,你说程序大小要足够小,不允许有库依赖,所以简单的结论是:你根本不能做稍微复杂一点的程序,连浏览器框架都做不了,毕竟一个 WebView 是静态链接进去的,体积不会太小。 所有第三方代码都必须开源编译并静态链接进去。如果一个程序很小,不可能完成一个足够复杂的任务。 除非你调用了动态链接库,但是你需要所有的静态链接,那么像你这样的程序根本做不了什么,何必麻烦大家给你找方法。 或者您只是来推广您开发的软件? 我相信如果把它们都集成到某个软件中,你说的事情确实可以做到,但是,你不认为你把所有依赖库的这种纯静态链接功能集成到你要推广的软件中吗, 不是第三方工具? 如果你能这么偷偷改变概念,确实可以实现。

桌面应用程序 Exe 带有 WinForm 界面。第一个推荐是C#毕竟,它是微软自己的。 编写Winform在开发效率和性能上都比其他开发语言快,相关资源和文章也很多。  C#非常适合开发Winform,功能非常强大。 好的结果。 缺点是需要netframework支持Windows 10、Win11自带NET Framework。 如果不考虑跨平台,C#开发是最方便高效的。如果想让界面效果更炫,那就用WPF让Winform在界面美化上更上一层楼。 但它会慢一点。

如果对性能要求高或者 *** 作系统底层使用C++或者直接C C++或者MFC,性能很好,但是开发难度比c#高。 如果直接用C,就比较难了。 优点是运行速度快,兼容性好。 除了汇编 C 和 C++ 应该是最快的。QT Qt是一个基于C++的跨平台图形用户界面应用框架。 与MFC相比,它是一种时尚的图形界面设计和开发工具,相对于MFC有很多优点。 丰富的API功能提高了用户的实际开发效率。 支持OpenGL2D、3D图形渲染。 支持QML脚本开发。 使用 QML 的缺点,开发效率被利用了:在运行环境中,Qt 需要将整个东西打包。 体积相当大。  C# 要小得多,因为许多依赖库都带有 windows。

Java Java可以做任何事情。 如果熟悉Java,可以使用Java进行开发,但运行时需要安装运行环境。  Java的生态资源非常丰富,教程也很多。如果你习惯Python,可以使用PyQt PyQt。 开发python也很容易。 可以使用qt for python+qwebview+pyinstaller打包单个exe,启动慢。 或者制作一个安装包,使用 fbs 或 pynsist 缺点:生成后包会稍大,第一次执行速度会有点感人。

热爱 Rust 并使用 Rust 语言Windows T 也可以用 Rust 语言开发。Electron 跨平台,界面美观Electron 是一个跨平台的桌面应用开发框架,让我们可以使用 html css js 的技术来开发可以安装在跨平台桌面的软件。  Electron 允许前端开发人员做更多的工作。 网上流行一句话:“别跟我说C++、Java,我靠JS走遍天下,需要的时候才去做。很容易上手能够使用react、vue等前端框架,可以轻松迁移前端组件,构建漂亮的桌面应用。

专门开发接口的早期开发语言还有其他早期开发语言。 如果要写native native exe,也可以使用以下语言的Delphi:Delphi 7,非常不错。 现在 Free Pascal 对于跨平台开发来说还不错。  VB6:从未消亡的开发语言,也有大量开发小工具的爱好者。 还是一个非常快的VFP:Visual Foxpro,但不是微软自己的,现在没有开发PB:PowerBuilder C++ builder 60:Borland的C++程序开发集成平台MASM:Macro assembler。 更加困难。 接近机器语言。优点是运行速度快,比c#快,生成的exe小,不易被破解。

其他开发语言Flex(flash script + java),easy language(中文编码),单独的EXE桌面软件也可以试试aardio,还不错。如果只针对Windows平台,建议使用c#或VB6。 如果想要更好的界面,可以使用浏览器调用html js 界面库或者WPF。 如果考虑跨平台。  ,上面有很多选项。 主要是根据你的实际需求,再考虑性能、部署等方面。

最近使用electron开发桌面应用,应用中涉及聊天截屏的功能。搜索了各种截屏工具,最后找到一个相对较好的解决方案。

具体可参考 Electron 调取微信截图       github

由于我的electron应用是用electron-builder生成的安装包,在安装后使用截屏工具时发现截屏自动触发结束按钮生成截图,并且截取的是electron应用范围内的内容。经过测试发现是由于打包成安装包时使用的asar加密导致该截图程序执行异常,将asar加密解除后程序正常执行。

唯一的不足是截图工具栏风格太有年代感,与项目风格不太一致,自己确无法修改。

前言:研究electron自动更新的时候,在electron的官方文档auto-updater中,提到了在几个平台mac,linux,windows下electron的自动更新方法,其中windsow平台上面,文章中建议先用grunt-electron-installer模块来创建windows安装包,grunt这个工具是由Squirrel集成的。进而了解下Squirrel这个工具,一个可以用来给electron应用的安装更新卸载添加快捷方式的工具。本文主要提及如何在windows平台下,用Squirrel创建electron的exe安装包。创建nuget包我们的方法是使用nuget工具创建Nuget包,再使用Squirrel工具创建exe。下载squirrelexe和nugetexe,也可以选择直接安装SquirrelWindows(需要有vitualstudio环境)。2新建文件夹如my-build,把下载好的squirrelexe,nugetexe和setupexe放进去,在文件夹放入我们未打包的electron应用,如下图:4在my-build根目录中,打开命令行执行nugetspec如下图:生成spec包初始文件5编辑器打开Packagenuspec,按照自己项目的需要编辑这个文件,如下图:这里需要注意:根据Squirrel文档说明,targetfolder属性需要设置为lib/net45,否则并没有用;标签用来制定未来的exe的icon。5用下面的命令创建一个nuget包,nugetpackPackagenuspec如下图:之后在目录中会出现这个包命名规则就是nupkg创建安装程序把应用程序打包成nuget包之后,就可以用squirrel创建一个安装程序了。在根目录打开命令行,执行以下命令:squirrel--releasifynupkg这个时候命令行中没有任何提示。但是别慌,编译一段时间后程序会创建一个release文件夹,里面有三个文件,nuget包,RELEASES文件和安装文件Setupexe。如下图:如果没有出现这三个文件,可以查看目录中的SquirrelSetuplog,根据里面的报错,来进行调试。注意上面这条squirrel命令,可以用来设置setupexe在安装过程中用传统icon还是用自定义的文件。使用Squirrel--help可以查看帮助发布应用和安装应用把上一步生成的setupexe发送给想要安装这个应用的用户,就可以了。最终应用会被安装在C:\Users\Administrator\AppData\Local\[appname]文件夹中,注意Squirrel的日志文件也存在目录中,调试安装问题的时候非常有用。双击我们的setupexe进行安装app的测试,如果中途有任何出错,在C:\Users\Administrator\AppData\Local\SquirrelTemp里面可以看到安装日志。如下图:安装之后打开C:\Users\Administrator\AppData\Local目录,可以看到app安装在这里,如下图:自动创建快捷方式进入我们安装之后的文件夹,命令行进入C:\Users\Administrator\AppData\Local\[yourappname],执行Updateexe--help,可以看到不知道从上图你有没有得到什么提示,反正我发现了,在命令行手动创建快捷方式的命令是Updateexe--createshortcutelectron\electronexe-i[youricotoute]\appico所以,如果我们想让应用在安装过程中静默地创建好快捷方式,那就需要在app的安装之后相反设法执行这句代码。因为我们的exe会在安装之后自动打开程序,所以我在程序的入口mainjs,添加sqruieel事件的监听就好了。如下图:我顺便把程序卸载时,删除快捷方式的监听事件也写了进去。还有程序的更新和删除事件监听,但是这两个事件,我还没有进行测试。更新应用其实我一直很想做增量更新,在这里我的更新方法有两个,第一是在程序的入口添加js,发送请求到服务器,拉取更改文件进行本地替换,但是如果是node_module依赖包的更改,这个方法并不可行。第二个方法比较安全而且快捷通过发布一个版本号不同的exe,如下:1在这个创建安装程序的步骤2中,我们把程序代码都复制到了这个文件夹里面,如下图:如果后续我们的程序要进行更新,首先我们需要把更改的文件直接复制替换到这个文件夹。2打开Packagenuspec,编辑version标签3参考本文种中创建安装程序部分的步骤2-4,重新生成setupexe,发布应用。通过执行setipexe安装,程序会自动删除之前的应用,但是我并不清楚,sqruieel是进行了增量替换,还是将之前的整个应用进行删除,再重新安装。创建自定义安装包在上一步,我们已经把自己的exe发布出来了,但是如果没有自定义名字跟icon,好像还不够酷,所以我们需要创建自定义的安装文件。下载安装ResourceHacker2打开这个项目目录,在electronexe上面右键出现菜单,点击OpenusingRescourceHacker。3ResourceHacker应用运行之后中,在以下界面中选择Icon,然后在工具栏里面选择Action,ReplaceIcon,如下图:然后选择自己想要替换的ico文件就好4这其实并不够,我们还需要更换exe里面的版本信息,打开VersionInfo,把FileDescription和ProductName改成我们自己的项目名称,最好把SquirrelAwareVersion也更改一下,毕竟是版本号。5做完这些之后,我们需要按照之前的步骤,在命令行中输入nugetpackPackagenuspec重新生成nuget包,然后再使用squirrel--releasifynupkg命令创建安装文件。6打开之后生成的releases文件夹,参考本文种中创建安装程序部分的步骤2-4,对setupexe进行自定义。最后,一个可以自动更新又安装便捷,还有我们自己的酷酷的图标跟名字的应用就生成拉!

本节我们来学习什么是主进程和渲染进程,主进程与渲染进程之间有什么区别,主进程和渲染进程之间的通信。下面我们先来看一下进程的概念。

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是 *** 作系统结构的基础。

在 Electron 中,启动项目时运行的 mainjs 脚本就是我们说的主进程。在主进程运行的脚本可以以创建 web 页面的形式展示 GUI 。

一个 Electron 应用有且只有一个主进程。并且创建窗口等所有系统事件都要在主进程中进行。

由于 Electron 使用 Chromium 来展示页面,所以 Chromium 的多进程结构也被充分利用。每个 Electron 的页面都在运行着自己的进程,这样的进程我们称之为渲染进程。

也就是说每创建一个 web 页面都会创建一个渲染进程。每个 web 页面都运行在它自己的渲染进程中。每个渲染进程是独立的,它只关心它所运行的页面。

主进程使用 BrowserWindow 实例创建网页。每个 BrowserWindow 实例都在自己的渲染进程中运行。当一个 BrowserWindow 实例被销毁后,相应的渲染进程也会被终止。

主进程管理所有页面和与之对应的渲染进程。每个渲染进程都是相互独立的,并且只关心他们自己的网页。

Electron 在主进程和渲染进程中提供了大量 API 去帮助开发桌面应用程序, 在主进程和渲染进程中,可以通过 require() 方法将其包含在模块中,以此获取 Electron 的 API 。

引入 electron :

所有 Electron 的 API 都被指派给一种进程类型。许多 API 只能被用于主进程或渲染进程中,但其中一些 API 可以同时在上述两种进程中使用。 每一个 API 的文档都将声明我们可以在哪种进程中使用该 API 。

Electron 中的窗口是使用 BrowserWindow 类型创建的一个实例, 它只能在主进程中使用,如下所示:

Electron 的主进程是在后台运行,对应 mainjs 文件。而渲染进程是前端看到的,对应 indexhtml 文件。这个两个进程之间的通信首选 ipc 方式,因为它会在完成时返回,而不会阻止同一进程中的其他 *** 作。

异步通信,在发送消息之后,不会阻止同一进程中程序的继续运行。下列示例渲染进程发送异步消息 ping 到主进程,然后主进程回答 pong 。

渲染器进程:

主进程:

除了以异步方式在进程之间发送消息,我们还可以使用 ipc 模块在进程之间发送同步消息,但是此方法的同步特性意味着它在完成任务时会阻止其他 *** 作。

渲染器进程:

主进程:

链接: >

1打包准备

    1在自己需要打包的vue项目中build项目包出来,这里就不做解释了

    2新建一个 exe文件夹 (名称自己定义)

    3克隆项目 地址:git clone >

这一周继续聊跨平台桌面开发这个事情。

在这篇文章中,我暂时会放下Electron与WebView2的一个对比,而聊一聊跨平台这个对于程序员群体来说不陌生的词。

一个趋势是:跨平台开发几乎是在各个技术方向都会持续发展的

跨平台这个词,对于程序员来说,应该是不陌生的。因为这个概念不只在某一端存在,后端,前端,移动端,桌面端几乎所有方向都对跨平台有需求。

在后端,Java是跨平台的,当你用Java来编写后端服务时,并不需要考虑 *** 作系统,因为它几乎支持主流的 *** 作系统。现在,编写一个后端服务,选用Java仍是主流。虽然可能它的跨平台特性已经不是程序员最在意的点了。

而在移动端,类似React Native,Flutter也是非常有名的跨平台移动开发,它们与移动原生开发方式之间一直是竞争与共存。

而前端因为依托于浏览器,天然就是跨平台的。事实上,很多应用或服务早期纷纷选择从原生应用迁移至前端WEB方式的一个非常重要的原因就在于它是跨平台的。

桌面 *** 作系统很长一段时间一直是Windows一家独大,所以桌面开发一直是Windows独占,直至现在为止,很多专业级的软件仍然是Windows独占的。

而Linux桌面 *** 作系统与MacOS桌面 *** 作系统,早些年几乎可以忽略不计,压根不需要考虑这两种系统。但随着近些年它们的慢慢流行,特别是苹果的MacOS的以其杰出的工艺,流畅的体验,叠加苹果手机的流行,其市场份额增长非常之快,在特定的诸如编程,设计等行业人群中使用范围较广,这使得开发支持MacOS系统这个点变得越来越重要。

所以,在桌面开发领域,跨平台的需求也越来越高。

这也是Electron及早期的NWjs能迅速发展起来并得到非常广应用的原因所在。

无论是哪一端,跨平台技术之所以频繁出现与不断发展,其根本原因就在于编程的一个重要痛点在于:

为了让同一个服务能在所有设备上运行,程序员不得不编写与维护非常多不同版本的程序

每一个程序或软件后面的服务,都有一个非常迫切的需求,就是期望它的用户无论何时,无论何地,无论使用任何设备,都能方便友好的使用这个服务。

也是因为这个原因,Web发展起来了,因为Web的优势就在这,只要你的设备上有浏览器,就能访问。

但Web毕竟性能有限,且浏览器这种形式并不利于用户忠诚度的培养,它存在天然的弱点。一些简单的 *** 作服务使用Web并无问题,但稍微有点要求的,Web可能就并不是非常适合。

所以,一种趋势不可避免地流行起来:

对不同设备或系统进行抽象,基于某一种特定的编程语言,编写出能与原生程序相媲美的,又能跨平台的技术便层出不穷了

对吧,Java是使用JVM来抽象不同的 *** 作系统,React Native则是使用虚拟DOM以及转换成原生控件的方式来实现跨平台,而Electron则是通过性能较好的Chrome内核+NodeJS原生调用能力的搭配来实现跨平台桌面开发。

总而言之,这种跨平台的技术不会消亡,只会有新的技术层出不穷,而它们与原生开发一定是相互竞争,配合与共存的。相互之间无法取代。

那再回到跨平台技术上来说,一个良好的跨平台开发的技术或框架,重点是什么。

或者换种方式说,哪些特性使得它更易于流行起来?

我个人认为有以下的几个点:

跨平台开发技术能不能流行起来的一个非常重要的点就在于,使用了什么样的编程语言。

以移动端跨平台开发技术来说明,一个React Native,一个Flutter,这两个是比较知名主流的跨平台移动开发技术。React Native使用的是前端React技术,而Flutter则是Google的D语言。

显而易见的是,虽然Flutter是使用skia引擎在底层重绘一套UI,其性能相比React Native这种模式更佳,但React Native更易于被接受。

在流行度上,React Native始终比Flutter更流行,一个最重要的原因也在于:

使用已熟知的前端编程语言,比起重新学习一个D语言更易于被接受,维护成本更可控。

这个问题在跨平台桌面开发中也是类似,跨平台桌面开发技术也不是Electron最开始出现,比如著名的QT很早就有了,但比起Electron这种使用前端编程技术来说,显然在编程语言的门槛上和程序员群体上都存在困难,这也是Electron能后来居上的原因所在。

因为,大多数程序员群体,相比较另外学习一门什么语言去做什么,使用自己熟悉的语言来做什么是更容易,意愿也更高。

而从公司或团队的考量上看,选择偏门的小众语言存在成本上的顾虑,比如人员招聘是否容易?

跨平台技术在尝试解决不同平台不一致,它或多或少会损耗性能。这也决定了几乎没有任何一个跨平台技术能取代原生开发。

这是一个取舍的问题,对于一个程序来说,究竟性能有多重要。对于比较看重性能的程序来说,原生开发可能是最优选择。

但跨平台的性能损耗也有高低之分,并不在同一水平线上。

其实,无论是Electron,或是WebView2,都是基于浏览器内核+前端技术的跨平台桌面解决方案,这也是为什么要把它们放在一起聊的原因。

Electron是先行者(当然,严格说来,NWjs出现的更早,但今天它的流行度已远远落后于Electron了),而WebView2则是后来者。

那做为后来者的WebView2究竟做了哪些改进?它又有多大的能力来挑战Electron呢?

下一篇,继续聊。

electron是使用JavaScript,HTML和CSS构建 跨平台 桌面应用程序 。我们可以使用一套代码打包成Mac、Windows和Linux的应用,electron比你想象的更简单,如果把你可以建一个网站,你就可以建一个桌面应用程序,我们只需要把精力放在应用的核心上即可。

工程架构

indexhtml

Apptsx

indextsx

将 electron 包安装到您的应用程序的 devDependencies

mainjs

以上就是关于开发独立EXE桌面应用程序,用什么语言、技术合适全部的内容,包括:开发独立EXE桌面应用程序,用什么语言、技术合适、eletron开发客户端应用集成截屏功能总结、electron开发桌面程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10172378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存