终于可以实现后台自动更新了

uniapp app自动更新 uniapp 基于uni-admin后台进行app自动更新 阅读详情

高兴啊。。。。。。。。。。。。。下面是所有步骤。研究了一上午终于搞定!

Step 1:  Build the application to update

In this step we will build the application to auto-update.  If you want, you can substitute in your own application here.  You can also use the pre-built sample application included in the Samples/SampleApp/SampleApp directory of the zip file.  However for the purpose of proving that there isn’t anything special about SampleApp, we’ll walk through its creation.

 

1.        Use Visual Studio .NET to create a new Windows Application project, name it “SampleApp”.  

2.        Give the form an interesting background color of your choice.  We will be using background color to differentiate between versions later.

3.        Now let’s add a tiny bit of functionality to this application in the form of a button that opens a form residing in a separate assembly.  First add a button to your form.   The zip file contains an assembly with a simple Windows Form in it.  Add a reference to the Samples/SampleApp/SimpleForm assembly in the zip.  Then add two lines of code to your button event handler:

 

       SimpleForm.Form1 F = new SimpleForm.Form1();

       F.Show();

 

4.        Switch your build flag to build RELEASE instead of debug.  This will allow us to avoid pdb file locking problems later when we build a new version of the application while the original copy is still running. 

5.        Build and test your application.  It should look similar to the Samples/SampleApp/SampleApp in the zip file.

 

Step 2:  Add the .NET Application Updater Component

In this step we will add the .NET Application Updater component to SampleApp.

 

1.        In the components tab of the Visual Studio .NET toolbox, right click and select ‘Customize Toolbox’. Select the ‘.NET Framework Components’ tab.  Browse and select the AppUpdater.dll in the AppUpdater project included in the zip.  Click OK.

2.        An AppUpdater icon should now show up at the bottom of the list of components in the toolbox.  Drag and drop the AppUpdater component onto the SampleApp Form.  An appUpdater1 instance of the .NET Application Updater component should be instantiated and appear below the form.

 

Step 3:  Configure the .NET Application Updater Component

In this step we will configure the .NET Application Updater component.  To do this, select the appUpdater1 component and open its properties.  The following section contains a description of each property and what value to set it to.  Note that you only need to change the first four properties for this example, for the rest, the defaults are adequate.

 

AppUpdater Properties – These are the core properties of the .NET Application Updater and will need to be set for this application as follows:

 

Property Name

Description

AutoFileLoad

 

This controls the on-demand download feature described later, for now set this to true.

ChangeDetectionMode

 

This enum determines how to check for updates.  In this example, we will use a server manifest check, so set this value to “ServerManifestCheck”.

ShowDefaultUI

 

The .NET Application Updater component has a set of simple UI for notifying the user of events such as a new update becoming available or errors during updates.  This UI can be replaced with custom application specific UI by disabling the default UI, hooking the appropriate events (ex. OnUpdateComplete) and popping up the custom UI.  For this example we will use the default UI, so set this value to true.

UpdateUrl

 

The UpdateUrl is what determines where the updater looks for updates.  In this case we are using a server manifest to check for updates, so this property should be set to the URL of the server manifest.  For this example, set it to http://yourWebserver/SampleApp_ServerSetup/UpdateVersion.xml.  Replace ‘yourWebserver’ with the name of your Web server. 


Downloader Properties – The AppUpdater component has two sub-components.  The first is called the Downloader and controls the download and installation of the component.  Below is a description of the properties, but all defaults will work fine for our SampleApp.

 

Property Name

Description

DownloadRetryAttempts

 

If a failure occurs during download (ex the Web server goes down) the downloader will try again a little later.  This property controls the number of times the downloader will retry the network request before treating it as a complete application update failure.

SecondsBeteweenDownloadRety

 

The number of seconds before retrying the network request.

UpdateRetryAttempts

 

If a serious error occurs during the update process, (ex. The downloader has exceeded the DownloadRetryAttempts), an application update error is generated.  By default, the update attempt will stop, but will attempt to resume the next time the application is started (ex… maybe the update Web server was just down for day).  This property controls how many times an update will be attempted.  If this value is exceeded, the updater aborts the update, resets its state and goes back to checking for updates.   

ValidateAssemblies

 

This controls the level of validation done on downloaded assemblies.  See the security section of this paper for more info.

 

Poller Properties – The second sub-component of the AppUpdater is the Poller.  The Poller controls the update checks.  Below is a description of the properties, but all defaults will work fine for our SampleApp.

 

Property Name

Description

AutoStart

 

A Boolean that controls whether or not the Poller should begin polling for updates on application startup or whether it should wait until it is explicitly started programmatically.

DownloadOnDetection

A Boolean that controls whether or not the Poller starts  a download of an update immediately after a new update is found, or whether the download must be started explicitly by a call to the DownloadUdpate() method.

InitialPollInterval

 

The number of seconds after application startup before the first update check is performed.

PollInterval

 

After the first update check, the PollInterval controls the number of seconds between each subsequent update check.  Note:  By default this checks every 30 seconds; clearly you will want to reduce the frequency for your application.

 

When all is said and done, your property grid should look the following:

 

 

 

The Samples/SampleApp/SampleApp_Complete directory contains a version of the application correctly setup.

 

Step 4:  Build & Deploy V1 of the application to the client

In this step we will build the V1 version of the application and deploy it to the client.  The deployment is essentially simulating what the install program for your application will do. 

 

1.        In the SampleApp project, open the AssemblyInfo.cs file.  Change the AssemblyVersion value from "1.0.*" to “1.0.0.0”.  This will cause the built assembly to get marked with a value of “1.0.0.0” instead of the ever increasing value Visual Studio normally assigns.

2.        Build the application.

3.        Copy the Samples/SampleApp/SampleApp_ClientSetup directory from the zip onto your local machine.  It doesn’t matter where you copy it, however the program files directory is the most realistic place to put it since that is where most applications get installed.  You’ll notice that SampleApp_ClientSetup directory already has AppStart.exe included.  AppStart.config is already set to point into the 1.0.0.0 directory and run SampleApp.exe.

4.        Copy the complete SampleApp (Appupdater.dll, SimpleForm.dll & SampleApp.exe) from the release build directory of SampleApp to the SampleApp_ClientSetup/1.0.0.0 directory on your client. 

 

At this point a fully functional version of the application should be “installed” on the client and executable by running AppStart.exe

 

Step 5: Setup the Web server

In this step we will setup the Web server for use in rolling out application updates.  The .NET Application Updater component uses HTTP-DAV to download the application update and thus requires a Web server that supports HTTP-DAV.  IIS 5.0 that comes with Windows 2000 and newer operating systems support HTTP-DAV.

 

1.        Copy the Samples/SampleApp_ServerSetup directory from the zip into the wwwroot directory of your Web server.  Note:  Any location on your Web server can be used, but be sure to update the UpdateUrl property accordingly.  Notice that UpdateVersion.xml is already setup for use as the server manifest file.

2.        For completeness, copy the V1 version of SampleApp into the 1.0.0.0 folder of the Web server.

3.        Enable IIS “Directory Browsing” for the SampleApp_ServerSetup directory on your Web server.  Since the .NET Application Updater component enumerates the contents of directories during download, “Directory Browsing” must be enabled.  To do this, open the “Internet Information Services” manager in the control panel.  Select the SampleApp_ServerSetup folder and open its properties.  Select the Directory Tab.  Check “Directory Browsing,” and click OK. 

 

Step 6:  Automatically update the application

OK, now it’s time to see the results of all this hard work by automatically rolling out a new version. 

 

1.        If the SampleApp version you deployed to the client isn’t running, launch it and leave it running.  Remember to use AppStart.exe. 

2.        Go back to Visual Studio and change something noticeable on the SampleApp form (ex… change the background color).

3.        Change the VersionInfo in AssemblyInfo.cs to be 2.0.0.0.

4.        Rebuild.

5.        Go to the Web server and create a 2.0.0.0 directory as a peer to the 1.0.0.0 directory.  Copy the new version of the application from the release build directory into the new 2.0.0.0 directory on the Web server.

6.        Open UpdateVersion.xml and change AvailableVersion to be 2.0.0.0.  Change the ApplicationURL to point at the new 2.0.0.0 directory.

7.        Save the changes to UpdateVersion.xml. 

 

As soon as you save the new UpdateVersion.xml, within 30 seconds the running copy of SampleApp should detect the newly available version.  SampleApp will then download the new version, apply the update, and pop up the default UI asking the user if they want to restart and start using the new version immediately.  Click “Yes” in response to this dialog.  SampleApp should restart and be running the new version.  If you look at the client deployment of SampleApp you will notice there is now a 2.0.0.0 directory next to the original 1.0.0.0 directory.   The 1.0.0.0 directory will be cleaned up the next time an update occurs.

 

On-Demand Install

By exploiting the extensible nature of the .NET Framework, the .NET Application Updater component is able to enable another feature, On-Demand installation.  By enabling On-Demand installation, only the main exe needs to be explicitly installed on the client.  The remainder of the application can be automatically downloaded and installed on an as needed basis.

 

You can see this feature in action with the SampleApp you just finished building and deploying.   In SampleApp we enabled the On-Demand install feature by setting the AutoFileLoad property to true.  First close SampleApp if it is still running.  Next, in the 2.0.0.0 folder of the SampleApp client deployment, delete SimpleForm.dll.  You’ll recall that SimpleForm.dll is the assembly that contains the form that is displayed when the button on SampleApp is clicked.  With SimpleForm.dll deleted, you would expect the application to throw an exception when the button is clicked.  Go ahead and try it by running SampleApp (remember to use AppStart.exe) and click the button in SampleApp.   

 

What happened?  It worked.  In fact if you look in the 2.0.0.0 folder you’ll see that SimpleForm.dll has reappeared.  So how did this happen?  The CLR is fundamentally programmable and extensible.  When the CLR could not find the SimpleForm.dll assembly, instead of simply failing, it raised the AppDomain.AssemblyResolve event.  The .NET Application Updater component hooks that event.  The .NET Application Updater component knows where a valid copy of SimpleForm.dll resides; on the deployment Web server.  It then downloads the assembly to the local application directory and tells the CLR to try to load the assembly again.  The second load attempt then succeeds. 

 

On-Demand installation is enabled and disabled via the AutoFileLoad property on the .NET Application Updater component.  It is a powerful feature that can make the initial download and install of your application tiny, but can be difficult to use correctly.  You must think hard about where the assembly boundaries reside in your application and what actions will cause an assembly to be downloaded.  Because the assembly download involves network I/O, it will take variable lengths of time to download.  During the assembly download, the application is frozen waiting for the assembly download to complete.

 

Deployment Security

While the ability to roll out application updates automatically has great benefits, it also comes with an inherent danger.  When you make it easier to roll out updates, if not careful, you could also make it easier to roll out malicious code.  There are two dangers.  The first danger is that someone will spoof the Web server used to deploy updates with their own Web server.  They could then use that Web server to roll out a virus in place of your application.   The easiest way to prevent spoofing or any other tampering over the wire is to use HTTPS.  To use HTTPS with the .NET Application Updater component, simply use HTTPS URLs in place of HTTP URLs. 

 

However, HTTPS is not a silver bullet.  There are two problems with HTTPS. The first is scalability.  Using HTTPS requires the server to encrypt all of the files that are downloaded from the Web server.  If an application update is large, the cost of encrypting the update can overburden the server.   The other issue with HTTPS is that it does nothing to address the second security danger.   The second danger has to do with your Web server being compromised, either from an insider or from an outsider hacking your server.  If your Web server is compromised, it’s bad enough, but if it also means that a thousand clients are also compromised via automatic updates, it could be disastrous.

 

To solve this problem, the .NET Application Updater component uses the ability to strong name a .NET assembly to verify the authenticity of the assembly upon download.  If the .NET Application Updater detects that an assembly is not signed with your application’s key during download, the update is aborted.  This means that only someone that has the private key of your application can build updates that can be automatically deployed.  .NET security is based on keeping your private key secret.  Even inside your own organization, only the few select people should have access to your private key.

 

To validate assemblies, the .NET Application Updater component verifies that the public key on the exe of your current installed application matches the public key on downloaded updates.  The embedded public key can only be the same if the two assemblies were signed with the same secret private key.  Because the assembly is loaded by the CLR in order to verify its public key, the CLR does its normal hash value check to ensure the assembly is in fact a real assembly and has not been tampered with.  If a verification check fails, it is treated just like any other update failure.  To enable verification on download, simply strong name all of your application assemblies and set the ValidateAssemblies property on the .NET Application Updater component to True.

 

Assembly validation on download works great, but in practice, applications will often have components signed with different private keys.  For example, your application may have two files:  The exe assembly signed with your private key and a dll assembly that contains a 3rd party charting control you purchased to use in your application.  This 3rd party assembly may be signed with the 3rd party’s private key and not yours.  What makes it even more complicated is that the set of valid private keys that can be used to sign assemblies in your application could change from version to version.  How do you auto-update these types of applications?   To solve this problem, you create an assembly that contains a list of valid public keys for your application.  Sign this assembly with the application’s main private key (the key that the exe of the application is signed with) and place this assembly in the directory with the application update on the Web server.  Before the update download process begins, the .NET Application Updater will check for a well known assembly “AppUpdaterKeys.dll” in the application update directory on the server.  If present, the assembly will be downloaded.  The assembly will be verified against the main application public key.  If the signature is valid, the list of keys will be extracted.  From that point on, any of the keys in that list will be treated as valid signatures for the files in the update.  The zip file that comes with this paper contains an AppUpdaterKeys project that can be used to build your own AppUpdaterKeys assembly.  The AppUpdaterKeys.dll also allows you to specify a set of file exceptions.  Files specified as exceptions can be downloaded and updated without passing the validation check.  This can be useful when your application contains non-assembly files, such as pdb files for debugging.

 

The recommended approach to security is to use HTTPS URLs to perform update checks.  This provides a first level of spoofing protection.  For update download, it’s best not to use HTTPS URLs to avoid the overhead on your Web server.  Instead, strong name your application assemblies and enable the Validate Assemblies feature.

 

Extensibility and Terrarium

In the sample we walked through earlier in this paper we enabled auto-deployment in an application simply by dropping a component into an application and setting some properties.  While this works well for many applications, some applications require a higher degree of control that can only be achieved by writing code.  The .NET Application Updater component has an API that can be used to customize and replace application update behavior.  The .NET Terrarium game (http://www.gotdotnet.com/terrarium/) I mentioned earlier is a heavy user of these extensibility hooks.   Let’s take a look at how Terrarium uses the .NET Application Updater component’s extensibility mechanisms. 

 

Terrarium uses a custom XML Web service to check for updates.  Terrarium hooks the OnCheckForUpdate event of the .NET Application Updater component and calls the XML Web service within this event handler.  OnCheckForUpdate fires on the poller thread.  Thus the XML Web service request is performed on a separate thread from the UI thread and does not lock the UI.  The call to the XML Web service passes the assembly version of the client’s current Terrarium install.   The XML Web service then decides whether or not a newer update is available for that client.  Two values are returned.   The first indicates whether or not an update is available.  The second is the URL where the update resides.  For scalability reasons, in practice, one server is used to check for updates and a separate server is used to download updates.   On the return from the XML Web service call, if a new update is available, Terrarium sets the UpdateUrl property of the .NET Application Updater component to the URL returned from the Web service.   This instructs the .NET Application Updater to use that URL for the next update download.  Finally, Terrarium returns true in the OnCheckForUpdate event handler if an update is available.

 

Terrarium also uses the custom XML Web service to increase scalability.  Updates to Terrarium exceed 10 MB in size.  Terrarium also checks for updates very frequently.  Thus, in the beginning, when a new update was rolled out, it wasn’t uncommon to have hundreds of clients asking for updates at once.  This resulted in Gigabytes worth of download requests and the server couldn’t handle the load.  Moving away from using HTTPS and decreasing the frequency of update checks helped the situation, but the ultimate solution was to build some intelligence into the XML Web service.  When the server is under load, the XML Web service only tells the first X number of clients that an update is available.  All of the rest are told that no new update is available.  The next time the clients check for updates, the next X set of clients are told an update is available.  In this way, the update is rolled out in waves and the server is not overloaded.     

 

Terrarium puts up its own custom UI that integrates better with the overall application.  Thus Terrarium disables the default .NET Application Updater UI.  Terrarium hooks the OnUpdateComplete event.   The OnUpdateComplete event includes a set of information, such as whether or not the update was successful, what, if anything, caused failure, and an English string with an explanation of the problem that can be presented to the user.  The OnUpdateComplete event fires on the main UI thread of the application.  Thus Terrarium raises UI to the user, informing them of update success or failure, directly in the OnUpdateComplete event handler. 

 

The .NET Application Updater component also includes additional APIs that allow explicit control over when actions like update checks and updates are performed.  These actions are controllable via the CheckForUpdate () and ApplyUpdate() methods respectively. 

 

Debugging

The source code for the .NET Application Updater component is provided so that you can debug problems and add functionality as needed.  However, before you dive too far into the source code, this section will spell out some first level debugging options, as well as describe the most frequently encountered problems by consumers of this component. 

 

The .NET Application Updater creates a hidden log file named AppUpdate.log that resides in the same directory as AppStart.exe.  All successful and failed updates are recorded in this log.  The log file is especially useful when there is a particular client machine that won’t update successfully.  You can use the log to determine when and how the update failed.  In addition, the .NET Application Updater component uses the Debug class of the .NET Framework to write out a lot of useful information.  If you run your application in the debugger, you will see this information in the output window.  You can essentially watch the .NET Application Updater go through its update steps and see where the problem is occurring.

 

If for whatever reason, you just can’t get the .NET Application Updater to work, make sure of the following before you debug too far, more than likely one of these is the problem you are encountering:

 

  • Do you have IIS Directory Browsing turned on?  If not, the downloader will see an empty directory on the Web server where the update resides.  The updater will then download and install an update of zero files, leaving you with the original unchanged application. See the “Setting up the Web server” section earlier in this paper for instructions on how to enable Directory Browsing.
  • Do you have everything deployed correctly and the correct URLs set?  It’s easy to make a mistake here.  Look at the URLs being output by the .NET Application Updater when running in the debugger.  Navigate to these URLs in the browser and make sure they are valid.
  • If your app is installed in the program files directory, are you an admin or power user on the box?  If not, you won’t have the write access necessary to update the application.
  • Did you create the AppUpdater object on the main UI thread of the application?  If not, the updater will not be able to present UI and will fail when firing events back to the UI thread.
  • Is the update succeeding, but the app failing to automatically restart to pick up new updates?  The .NET Application Updater component attempts to restart the application by calling the Application.Exit method.  However, that method is not guaranteed to shut down an application.  If you spawn & leave separate threads running, it will not close the process.  The solution is to ensure that all threads are terminated via the Application.OnExit event, or hook the .NET Application Updater’s OnUpdateComplete event and handle the shutdown yourself.

 

Summary

Ease of deployment for client applications was a major goal for the first version of the .NET Framework.   There is no other technology for building client applications that addresses the deployment problems as well as the .NET Framework.  Ease of deployment will continue to be a major goal for future versions of the .NET Framework.  The .NET Application Updater component described here represents some of our thinking in terms of scenarios we would like to enable directly in future versions of the .NET Framework.  However, until that time the .NET Application Updater component is a great way to get started building auto-updating applications.

 

Vscode关闭自动更新 关闭Vscode自动更新 点击文件,首选项,设置, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESDLG6Nl-1629687652942)(http://qiniu.daidaixiang.xyz/image-20210823105512984.png)] 在打开的设置里面搜索update或更新,可能会找到很多关于更新的设置,我们在目录里面选择应用程序。可以看到有这么几个设置: Update:Channel或者Update:Mode(配置是否从更新通道接收自动更新)此配 阅读详情

相关推荐

掌握后台自动更新APP的完整技术流程

本文还有配套的精品资源,点击获取 简介:在移动应用开发中实现后台下载更新功能,需要处理服务(Service)、网络请求、文件管理等技术要点。本文详细探讨了如何创建后台服务进行下载任务、使用高效网络库处理请求、管理文件下载进度、多线程处理、权限管理、通知栏提醒以及安装更新的策略。开发者可以根据这些要点来设计和优化后台自动更新APP的过程,提供无干扰的用户体验。 1....

weixin_35972981的博客 1627

热门稳定的BT Tracker列表-自动更新

每10分钟自动更新一次!该项目从全网搜集bt tracker,后台自动测试有效性和稳定性,国内访问稳定性达到98%以上的tracker才会,加入列表。

panpan20008的博客 8万+

实现Android应用的自动更新机制

版本号比较:通过比较应用当前版本号和服务器版本号,决定是否需要下载新的更新包。APK文件下载与管理:在Android中,APK文件的下载和管理需要考虑存储空间、下载完整性校验、用户权限等因素。动态权限申请:自动更新涉及到文件下载、安装等功能,需要申请相应的权限,如WRITE_EXTERNAL_STORAGE、INTERNET等。通过接下来的章节,我们将深入探讨这些关键步骤和背后的技术细节,为实现一个高效可靠的Android应用自动更新机制提供具体的技术方案和最佳实践。

weixin_34374684的博客 1595

开源项目指南:跟踪器列表集合(TrackersListCollection)

`trackerslist` 是一个由 ngosang 维护的开源项目,提供了一个不断更新的公共 BitTorrent 跟踪器列表。这些跟踪器可用于增强 BT 种子和磁力链的连接性能,以获得更好的下载速度和更稳定的文件共享体验。项目支持 HTTP, UDP 和 WebTorrent 协议,并提供多种格式供不同的客户端或工具使用。 ## 2. 项目快速启动 ### 安装依赖(适用于命令行操作)

gitblog_00188的博客 4624

Android应用的自动更新机制:对话框与通知实现

简介:在Android应用开发中,维护最新版本对于提升用户体验至关重要。本文深入探讨如何使用对话框(Dialog)和通知(Notification)实现应用的自动更新提示。分析了对话框和通知各自的适用场景、优势与局限性,以及如何结合后台服务实现检查更新和下载更新的策略。强调了根据应用特性和用户习惯选择合适更新提示方式的重要性,以及在实施更新过程中对用户体验的关注。

weixin_42576410的博客 1281

比特彗星 bitcomet 1.51版本

比特彗星 bitcomet 1.51版本 极速下载/边下边放/长效种子/磁盘缓存

aria2最新tracker服务器,Aria2自动更新BT Tracker服务器列表的方法

说明公开的BT tracker服务器,因为种种原因总会经常失效,要想获取更多的peer需要经常维护这份列表。感谢github上的小伙伴提供了这么一份tracker自动更新列表:trackerslist。我们要想Aria2也支持自动更新这份列表,那么你可以按照下面方法来实现。方法此文仅适用于Centos系统,其它系统稍作变更即可。我没有使用过其它系统,这里也就不提供兼容性的脚本了。示例:Aria2安...

weixin_34007963的博客 5189

本地部署了qwen2.5:0.8b ,对接openclaw 后,电脑卡的要死

OpenClaw 强制 16k 上下文 + 无限历史 + Agent 调度,把 0.8b 压垮。按上面配置:轻量化 + 限历史 + 驻留显存,电脑立刻不卡。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 977

Win10禁用各种后台更新的方法

Wn10禁用各种后台更新的方法 适用于Win10-19042.631版本 主要思路 主要思路是,在以下4个地方禁用 1、注册表 2、组策略(gpedit.msc) 3、服务 4、任务计划程序(taskschd.msc) 5、系统配置(msconfig),通常很少用到 一、任务计划程序(edge、google浏览器等都在此处有设置) 1、说明: 很多顽固应用总是无缘无故冒出来执行,与“任务计划程序”脱不了关系,即使服务、组策略、注册表都禁用了,很多应用仍会执行,都与任务计划程序有关。所以,第一件事就是先处理这

我不是码农的博客~~~ 3606

U盘重装Win10系统

准备工作 准备一个8G或8G以上U盘(32G以内) 请备份好u盘里的资料,在制作过程中会格式化硬盘 请备份好要安装系统的盘的资料,安装时也会对该盘内容进行格式化。 将u盘插入电脑usb接口中,尽可能的插入usb3.0的接口,这样下载和安装速度会更快。 1.到微软官网下载安装包 浏览器输入:微软官网下载win10 懒人请复制粘贴:https://www.microsoft.com/zh-cn/software-download/windows10 ​ 打开之后的界面: 2.下载Media Creat.

Cici$的博客 2115

从零开始:如何用STM32和MAX30100打造你的第一台智能心率监测设备

本文详细介绍了如何使用STM32微控制器和MAX30100传感器从零开始构建智能心率监测设备。涵盖硬件选择、电路设计、软件开发到心率算法实现的全过程,特别适合嵌入式开发新手和创客。通过OLED显示和蓝牙串口传输数据,打造低成本、高精度的心率检测仪,为健康监测项目提供实用解决方案。

7z8x2c4v6b9的博客 191

android 自动更新后台,Android应用自动更新功能实现的方法

本文给大家分享Android里应用版本更新功能这一块的实现。一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能。自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比如,提示语;最...

weixin_31493101的博客 2068

运动目标成像必学:5分钟搞懂keystone变换原理与避坑指南

本文深入浅出地解析了雷达信号处理中的Keystone变换原理,它是解决运动目标距离徙动问题的关键技术。文章通过直观比喻和简化公式,阐述了该变换如何通过变量代换实现距离与慢时间的解耦合,将倾斜轨迹“掰直”,从而提升成像与检测性能。同时,文中重点指出了实际应用中关于大速度场景、插值误差、多目标处理及高阶运动补偿等关键避坑点,为工程实践提供了宝贵指南。

ios99的博客 403

Android应用自动更新功能的实现!!!

大家好,发现半年没有更新博客了,最近一直都比较忙,决定在凌晨 英超 阿森纳VS富勒姆 中场休息的时候,给大家分享Android里应用版本更新功能这一块的实现。一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能。自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我

Android_Tutor的专栏 11万+

使用 Prometheus 监控 Spring Boot 应用

本文介绍了使用SpringBoot+Prometheus+Grafana实现应用监控的方案。首先在SpringBoot项目中集成Micrometer和Actuator组件,通过配置暴露Prometheus监控端点。接着配置Prometheus采集应用指标数据,并通过Grafana可视化展示。具体步骤包括:1)SpringBoot集成Micrometer;2)配置Prometheus抓取应用指标;3)安装Grafana并导入SpringBoot监控模板;4)展示JVM和业务指标。该方案可以实现对SpringB

蔡定努 430

芯片研发完整全流程

芯片研发全流程可分为需求与架构设计、前端逻辑设计、后端物理设计、晶圆制造、封装测试五大阶段,涉及16个核心步骤。研发过程需要多学科交叉协作,包括微电子、物理、材料、计算机等。关键注意事项包括验证优先、工艺约束遵循、可测性设计等。芯片设计需要绘制纳米级精度的物理版图,而非传统工程图纸,需使用专业EDA工具而非KiCad这类PCB设计软件。完整研发流程具有高投入、高风险特点,需严格遵循行业标准和规范。

weixin_44520581的博客 228

Spring Data JPA的自动更新,为什么会自动更新?如何避免自动更新?

公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库。在工作刚开始时就遇到了一个奇怪的现象。在采用Date JPA查询完数据库之后,若改变了查询出的对象属性,那么数据库就会自动更新。比如查询出一个studentPO的name为“小明”,然后进行了一步studentPO.setName("小红")操作,再返回给前台,此时的数据库中的这个studentPO...

qq_38658642的博客 1万+

基于STM32L4XX、HAL库的AD7124模数转换器ADC驱动程序设计

/ 检查ID是否正确 (AD7124-4/AD7124-8有不同的ID)// 转换为电压值 (假设使用内部2.5V基准)// 构造读命令: 1(R/W) + 1(0) + 6(寄存器地址)// 构造写命令: 0(R/W) + 1(0) + 6(寄存器地址).config = 0, // 使用配置0。内置可编程增益放大器(PGA):1-128倍。// 读取ADC数据。// 读取当前ADC控制寄存器。// 检查数据是否就绪。// 写回ADC控制寄存器。// 初始化AD7124。

zhusl6688的博客 519

使用QtAutoUpdater实现自动更新功能

QtAutoUpdater是一款基于Qt库开发的自动化更新检查及安装工具。它旨在帮助软件开发者在其应用程序中轻松集成自动更新机制,从而确保用户的客户端始终运行最新版本。 该库支持多种平台和后台服务,包括Qt Installer Framework、PackageKit、Chocolatey、Homebrew以及Google Play Store等。此外,还允许自定义Web查询后端以适应特定需求。...

gitblog_01015的博客 2166

FISCO BCOS 三、多群组部署以及新节点加入群组

本章主要以星形组网和并行多组组网拓扑为例,指导您了解如下内容:了解如何使用创建多群组区块链安装包;了解创建的多群组区块链安装包目录组织形式;学习如何启动该区块链节点,并通过日志查看各群组共识状态;学习如何向各群组发送交易,并通过日志查看群组出块状态;了解群组内节点管理,包括节点入网、退网等;了解如何新建群组。

qq_63235624的博客 2919

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

qt自动更新实现与问题解决

使用Gittee实现更新,流程复杂,依赖外部服务,并不适合生产环境。当然很大一部分原因是我想试试gittee的api,所以弄复杂了,实际上这两套代码完全可以复用,差的只是一个url。使用Nginx部署文件夹,简化了更新流程,减少了外部依赖,更适合生产环境。

carolinas的博客 2063

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

高逼格,超简单,实现App自动更新,一个方法搞定

前言前段时间写了一个篇APP自动更新下载的文章自动更新,一个方法搞定,使用系统的DownloadManager 方法超简洁的实现了apk的下载,不过有好多网友反映有一些机型上面这个方法无法实现下载,经过小编的实验在部分机型上确实会有这个问题,所以其中下载的部分只能通过其它方法搞定了。正好看到网上好多关于使用Retrofit实现下载并且监听进度的文章,并且我一直在看Retrofit的东西但是一直没有机

shan_yao的博客 3万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

关闭wordpress后台自动更新功能

本文介绍了wordpress如何使用代码关闭程序,主题,插件自动检测更新功能

acheng2的博客 641

android之程序自动更新的实现

应用都有版本的更新,那么怎样实现更新呢?今天就为大家介绍应用自动更新的全过程。 程序自动更新的流程大致如下: 程序启动 -->适时后台检查更新--->链接远程服务器-->获取新版本信息 -->比对当前版本-->if(有更新)-->显示更新提示对话框并显示更新的内容-->交与用户选择. 下面是我做的demo,大家可以参考一下: 布局比较简单就不上代码了。 主程序代码:

小小程序员 欢迎光临!专注于移动互联网! 3118

mysql关闭自动更新_彻底关闭WordPress自动更新和后台更新检查

WordPress更新服务器在国外,每次打开后台都会自动更新检测和自动更新功能,而国内的网络由于总总原因总是无法顺畅得连接上 WordPress 的更新服务器,所以一直卡在那里,造成 WordPress 后台非常慢!在当前主题的 functions.php 文件添加如下代码,就可以彻底关闭 WordPress 自动更新和后台更新检查,这样更新的时候,就要手动来更新了,比如使用 SSH 安装,升级和...

weixin_42315569的博客 356
上一篇: 该是为祖国做点事情的时候了!
下一篇: 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
kevin521
博客等级 码龄23年 7粉丝 27原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值