当前位置: 首页 > news >正文

WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中

在这里插入图片描述
在这里插入图片描述

WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中

  • 一、前言
  • 二、部署与发布基础概念
    • 2.1 部署的定义与目的
    • 2.2 发布的方式与渠道
    • 2.3 部署与发布的关键要素
  • 三、WPF 应用程序打包
    • 3.1 使用 Visual Studio 自带的打包工具
    • 3.2 使用第三方打包工具
  • 四、发布到不同平台
    • 4.1 发布到本地
    • 4.2 发布到应用商店
    • 4.3 网络部署(以 ClickOnce 为例)
  • 五、部署与发布中的常见问题及解决方法
    • 5.1 依赖项管理
    • 5.2 权限问题
    • 5.3 版本管理
  • 六、部署与发布的优化策略
    • 6.1 减小安装包大小
    • 6.2 提高安装速度
    • 6.3 增强用户体验
  • 七、总结
  • 结束语
  • 优质源码分享

WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中 ,开发一个功能强大、用户体验良好的 WPF 应用程序只是完成了一半的工作,将应用程序顺利部署与发布到用户手中同样至关重要。部署与发布过程涉及多个环节,从应用程序的打包、分发到在用户环境中的安装和运行,每一步都需要精心规划和处理,以确保用户能够无障碍地使用应用程序。本文将详细探讨 WPF 应用程序的部署与发布流程,通过丰富的代码示例和详细的概念解释,帮助开发者掌握如何将自己的作品成功交付给用户。

一、前言

    在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

    在当今数字化时代,桌面应用程序的用户界面(UI)设计至关重要,它直接影响着用户体验与产品的竞争力。而 WPF(Windows Presentation Foundation)作为微软推出的一款强大的 UI 框架,其布局系统更是构建精美界面的核心要素。WPF 布局系统为开发者提供了丰富多样的布局方式,能够轻松应对各种复杂的界面设计需求,无论是简洁明了的工具软件,还是功能繁杂的企业级应用,都能借助其打造出令人惊艳的视觉效果与流畅的交互体验。

    WPF从入门到精通专栏,旨在为读者呈现一条从对 WPF(Windows Presentation Foundation)技术懵懂无知到精通掌握的学习路径。首先从基础入手,介绍 WPF 的核心概念,涵盖其独特的架构特点、开发环境搭建流程,详细解读布局系统、常用控件以及事件机制等基础知识,帮助初学者搭建起对 WPF 整体的初步认知框架。随着学习的深入,进阶部分聚焦于数据绑定、样式模板、动画特效等关键知识点,进一步拓展 WPF 开发的能力边界,使开发者能够打造出更为个性化、交互性强的桌面应用界面。高级阶段则涉及自定义控件开发、MVVM 设计模式应用、多线程编程等深层次内容,助力开发者应对复杂的业务需求,构建大型且可维护的应用架构。同时,通过实战项目案例解析,展示如何将所学知识综合运用到实际开发中,从需求分析到功能实现再到优化测试,全方位积累实践经验。此外,还探讨了性能优化、与其他技术集成以及安全机制等拓展性话题,让读者对 WPF 技术在不同维度有更深入理解,最终实现对 WPF 技术的精通掌握,具备独立开发高质量桌面应用的能力。

🛕 点击进入WPF从入门到精通专栏

在这里插入图片描述

二、部署与发布基础概念

2.1 部署的定义与目的

    部署是指将开发好的应用程序及其相关资源(如配置文件、依赖库等),按照一定的规则和方式,放置到用户的计算机或服务器上,使其能够正常运行的过程。部署的目的在于让用户能够便捷地获取和使用应用程序,同时确保应用程序在不同的环境中都能稳定、高效地运行。例如,一个企业内部使用的 WPF 管理系统,需要部署到各个员工的办公电脑上,以便员工能够进行日常的业务操作。

2.2 发布的方式与渠道

    本地安装包:将应用程序打包成一个安装文件(如.exe 文件),用户下载后在本地计算机上进行安装。这种方式适用于大多数桌面应用程序,用户可以通过官网下载、光盘安装等方式获取安装包。

    应用商店发布:将应用程序提交到应用商店(如 Microsoft Store),用户可以在应用商店中搜索并下载安装。应用商店发布的好处在于能够利用应用商店的推广渠道,提高应用程序的曝光度,同时也便于应用程序的更新管理。

    网络部署:通过网络共享或 Web 部署的方式,让用户直接从网络上运行应用程序,而无需在本地安装。例如,使用 ClickOnce 技术,用户可以通过点击链接的方式直接启动应用程序,应用程序会自动下载并更新到最新版本。

2.3 部署与发布的关键要素

    兼容性:确保应用程序能够在不同的操作系统版本(如 Windows 7、Windows 10、Windows 11 等)和硬件环境中正常运行。例如,某些应用程序可能依赖特定的显卡驱动或 CPU 指令集,需要在部署时进行兼容性测试。

    安全性:保护应用程序及其数据的安全,防止被恶意篡改或攻击。在部署过程中,需要对安装包进行数字签名,确保其完整性和来源可靠。同时,应用程序在运行时也需要采取安全措施,如加密敏感数据、防止 SQL 注入等。

    可维护性:便于应用程序的后续维护和更新。在部署时,需要考虑如何方便地推送更新包,以及如何让用户能够轻松地进行更新操作。

三、WPF 应用程序打包

3.1 使用 Visual Studio 自带的打包工具

    Visual Studio 提供了强大的打包功能,通过创建 “安装项目” 可以方便地将 WPF 应用程序打包成安装文件。

    创建安装项目:在 Visual Studio 中,右键点击解决方案,选择 “添加” -> “新建项目”,在弹出的对话框中选择 “安装项目”。

    添加项目输出:在安装项目中,右键点击 “应用程序文件夹”,选择 “添加” -> “项目输出”,选择要打包的 WPF 应用程序项目,添加主输出和内容文件。

    设置安装项目属性:在安装项目的属性窗口中,可以设置安装文件的名称、版本、公司名称等信息。还可以设置安装过程中的用户界面、安装目录等。

    生成安装文件:右键点击安装项目,选择 “生成”,Visual Studio 会生成一个安装文件(.msi 文件),用户可以通过运行这个文件来安装应用程序。

3.2 使用第三方打包工具

    除了 Visual Studio 自带的打包工具,还有一些第三方打包工具可供选择,如 Inno Setup、Advanced Installer 等。

    1.Inno Setup:是一款免费的开源打包工具,具有强大的脚本编写功能,可以灵活地定制安装过程。以下是一个简单的 Inno Setup 脚本示例:

[Setup]
AppName=My WPF Application
AppVersion=1.0.0
DefaultDirName={pf}\My WPF Application
OutputDir=userdocs:Inno Setup Examples Output[Files]
Source: "C:\MyProject\bin\Release\*.*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs

    在这个脚本中,[Setup]部分定义了应用程序的名称、版本、默认安装目录等信息;[Files]部分定义了要打包的文件及其目标目录。

    2. Advanced Installer:是一款功能丰富的商业打包工具,提供了直观的图形界面,方便用户进行各种设置。使用 Advanced Installer,用户可以轻松地创建安装包、设置安装流程、添加自定义操作等。

四、发布到不同平台

4.1 发布到本地

    创建自解压文件:可以使用工具将打包好的安装文件创建成自解压文件,方便用户下载和安装。例如,使用 WinRAR 等压缩工具,将安装文件压缩成自解压格式(.exe),用户双击自解压文件即可开始安装。

    制作安装光盘:将安装文件和相关文档刻录到光盘上,适用于需要离线安装的用户。在制作安装光盘时,需要创建一个自动运行的启动文件(autorun.inf),以便用户插入光盘后能够自动启动安装程序。

[autorun]
open=setup.exe
icon=setup.exe,0

4.2 发布到应用商店

    发布到 Microsoft Store:首先需要注册为 Microsoft Store 开发者,然后按照 Microsoft Store 的发布指南,准备好应用程序的元数据(如应用名称、描述、图标等)、截图、视频等素材。在 Visual Studio 中,使用 “发布向导” 将应用程序打包成 AppX 格式,并提交到 Microsoft Store 进行审核。审核通过后,用户即可在 Microsoft Store 中搜索并下载应用程序。

    发布到其他应用商店:不同的应用商店可能有不同的发布要求和流程。例如,发布到华为应用市场,需要遵循华为的开发者规范,上传应用程序的 APK 文件(对于支持跨平台的 WPF 应用),并填写相关的应用信息和测试报告。

4.3 网络部署(以 ClickOnce 为例)

    ClickOnce 是一种部署技术,它允许用户通过点击链接或网页上的按钮来启动应用程序,应用程序会自动下载并安装到本地。

    配置 ClickOnce 发布:在 Visual Studio 中,右键点击 WPF 应用程序项目,选择 “属性”,在 “发布” 选项卡中,设置发布位置(如 HTTP 地址、文件共享路径等)、更新策略(如自动检查更新、用户手动检查更新等)。

    发布应用程序:点击 “发布向导”,按照提示完成发布过程。发布完成后,会生成一个发布网页,用户可以通过访问这个网页来启动应用程序。

    更新应用程序:当应用程序有更新时,只需重新发布应用程序,ClickOnce 会自动检测到更新,并提示用户进行更新。用户点击更新后,应用程序会自动下载并安装最新版本。

五、部署与发布中的常见问题及解决方法

5.1 依赖项管理

    问题描述
    WPF 应用程序通常依赖于一些外部库和组件,如数据库驱动、第三方控件等。在部署过程中,如果这些依赖项没有正确安装或配置,应用程序可能无法正常运行。

    解决方法
    在打包时,将所有依赖项一并打包到安装文件中。例如,使用 Visual Studio 的 “依赖项” 功能,将第三方库添加到项目中,并设置为 “复制到本地”。

    在安装过程中,使用安装程序自动检测并安装依赖项。例如,使用 Inno Setup 的[Run]部分,添加安装依赖项的命令。

[Run]
Filename: "{app}\Dependencies\InstallDependency.exe"; Parameters: "/silent"; Flags: waituntilterminated

5.2 权限问题

    问题描述
    在安装和运行应用程序时,可能会遇到权限不足的问题,导致安装失败或应用程序无法正常访问某些资源。

    解决方法
    在安装程序中,使用管理员权限运行安装过程。例如,在 Inno Setup 中,可以设置RequestExecutionLevel为admin。

[Setup]
RequestExecutionLevel=admin

    在应用程序中,使用适当的权限管理策略。例如,在访问敏感资源时,使用WindowsIdentity和WindowsPrincipal类来检查用户权限。

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
if (principal.IsInRole(WindowsBuiltInRole.Administrator))
{// 执行管理员权限的操作
}
else
{// 提示用户需要管理员权限
}

5.3 版本管理

    问题描述
    在应用程序的更新过程中,可能会出现版本冲突或更新失败的问题。

    解决方法
    使用版本号来管理应用程序的版本。在 Visual Studio 中,可以在项目属性的 “应用程序” 选项卡中设置版本号。

    在更新过程中,使用版本比较来判断是否需要更新。例如,在 ClickOnce 更新中,通过比较当前应用程序版本和服务器上的版本来决定是否提示用户更新。
ApplicationDeployment deployment = ApplicationDeployment.CurrentDeployment;
Version currentVersion = Assembly.GetExecutingAssembly().GetName().Version;
Version latestVersion = deployment.CurrentVersion;
if (latestVersion > currentVersion)
{
// 提示用户更新
}

六、部署与发布的优化策略

6.1 减小安装包大小

    压缩文件:在打包过程中,使用压缩算法对文件进行压缩,减小安装包的体积。例如,Inno Setup 和 Advanced Installer 都支持文件压缩功能。

    精简依赖项:仔细检查应用程序的依赖项,去除不必要的库和组件。例如,如果应用程序只使用了某个第三方库的部分功能,可以考虑使用更轻量级的替代品。

6.2 提高安装速度

    优化安装流程:减少安装过程中的不必要操作,如减少文件复制次数、优化数据库初始化过程等。

    使用并行安装:对于一些可以并行安装的组件或依赖项,可以使用多线程或异步操作来提高安装速度。例如,在安装多个依赖项时,可以使用Task类来并行执行安装命令。

List<Task> tasks = new List<Task>();
tasks.Add(Task.Run(() => InstallDependency1()));
tasks.Add(Task.Run(() => InstallDependency2()));
Task.WaitAll(tasks.ToArray());

6.3 增强用户体验

    提供详细的安装向导:在安装过程中,提供清晰、易懂的安装向导,引导用户完成安装操作。可以在安装向导中添加说明文字、图片等,帮助用户更好地理解安装过程。

    实时显示安装进度:在安装过程中,实时显示安装进度,让用户了解安装的进展情况。例如,在 Inno Setup 中,可以使用ProgressMeter组件来显示安装进度。

procedure CurStepChanged(CurStep: TSetupStep);
beginif CurStep = ssInstall thenbeginWizardForm.ProgressMeter.Position := 0;WizardForm.ProgressMeter.Max := TotalFileCount;end;
end;procedure NextFile(FileName: string);
beginWizardForm.ProgressMeter.Position := WizardForm.ProgressMeter.Position + 1;
end;

七、总结

    WPF 应用程序的部署与发布是一个复杂而重要的过程,它涉及到多个环节和技术。通过合理选择打包工具、发布平台,妥善解决常见问题,并采取有效的优化策略,开发者可以确保应用程序能够顺利地交付到用户手中,为用户提供良好的使用体验。随着技术的不断发展,部署与发布的方式和工具也在不断更新和改进,开发者需要持续关注最新的技术动态,不断优化自己的部署与发布流程,以适应不断变化的市场需求。只有这样,才能让自己的 WPF 应用程序在竞争激烈的软件市场中脱颖而出,赢得用户的信任和喜爱。

结束语

        展望未来,WPF 布局系统依然有着广阔的发展前景。随着硬件技术的不断革新,如高分辨率屏幕、折叠屏设备的日益普及,WPF 布局系统有望进一步强化其自适应能力,为用户带来更加流畅、一致的体验。在应对高分辨率屏幕时,能够更加智能地缩放和布局元素,确保文字清晰可读、图像不失真;对于折叠屏设备,可动态调整布局结构,充分利用多屏空间,实现无缝切换。

        性能优化方面,微软及广大开发者社区将持续努力,进一步降低复杂布局的计算开销,提高布局更新的效率,使得 WPF 应用在处理大规模数据、动态界面时依然能够保持高效响应。通过改进算法、优化内存管理等手段,让 WPF 布局系统在性能上更上一层楼。

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/145476406(防止抄袭,原文地址不可删除)

相关文章:

WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中

WPF高级 | WPF 应用程序部署与发布&#xff1a;确保顺利交付到用户手中 一、前言二、部署与发布基础概念2.1 部署的定义与目的2.2 发布的方式与渠道2.3 部署与发布的关键要素 三、WPF 应用程序打包3.1 使用 Visual Studio 自带的打包工具3.2 使用第三方打包工具 四、发布到不同…...

在 IntelliJ IDEA(2024) 中创建 JAR 包步骤

下是在 IntelliJ IDEA 中创建 JAR 包的详细的步骤&#xff1a; ​1. 选择File -> Project Structure->Artifacts&#xff0c; (1)点击➕新建&#xff0c;如下图所示&#xff1a; (2)选择JAR->Empty (3)输入jar包名称&#xff0c;确定输出路径 &#xff08;4&#…...

【C++】5.4.3 范围for语句

范围for语句基本形式&#xff1a; for(声明变量:序列容器) {循环执行语句; } 其中&#xff0c;“序列容器”是指花括号括起来的初始值列表、数组、vector或者string等类型的对象&#xff0c;主要特点是拥有能返回迭代器的 begin() 和 end() 成员; “声明变量”是一个类似声明…...

达梦数据库备份

达梦数据库联机在线备份操作指南 一、基础条件与准备 开启归档模式‌: 联机备份必须处于归档模式下&#xff0c;否则无法执行。需通过disql工具执行以下操作&#xff1a; alter database mount; alter database ARCHIVELOG; 例子&#xff1a; [dmdbaserver ~]$ cd /op…...

Linux系统基于ARM平台的LVGL移植

软硬件介绍&#xff1a;Ubuntu 20.04 ARM 和&#xff08;Cortex-A53架构&#xff09;开发板 基本原理 LVGL图形库是支持使用Linux系统的Framebuffer帧缓冲设备实现的&#xff0c;如果想要实现在ARM开发板上运行LVGL图形库&#xff0c;那么就需要把LVGL图形库提供的关于帧缓冲设…...

C++ 二叉搜索树代码

C 二叉搜索树代码 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){} };template<typena…...

DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发

不知道你们发现没有&#xff0c;就是鸿蒙开发官网&#xff0c;文档也太多太多了&#xff0c;对于新手来说确实头疼&#xff0c;开发者大多是极客&#xff0c;程序的目的是让世界更高效&#xff01;看文档&#xff0c;挺头疼的&#xff0c;毕竟都是理科生。 遇到问题不要慌&…...

蓝桥杯牛客1-10重点(自用)

1 import mathdef lcm(a,b):return a * b // math.gcd(a, b) # math.gcd(a, b)最小公倍数 a,b map(int,input().split()) # a int(input()) # 只读取一个整数 # print(a) print(lcm(a,b)) 2 import os import sysdef fly(lists,n):count 0flag Falsefor i in range(1,n…...

Kafka - 高吞吐量的七项核心设计解析

文章目录 概述一、顺序磁盘I/O (分区顺序追加)1.1 存储架构设计1.2 性能对比实验1.3 存储优化策略 二、零拷贝技术&#xff1a;颠覆传统的数据传输革命2.1 传统模式痛点2.2 Kafka优化方案 三、页缓存机制&#xff1a;操作系统的隐藏加速器3.1 实现原理3.2 优势对比 四、日志索引…...

Towards Precise and Explainable Hardware Trojan Localization at LUT Level

文章 《Towards Precise and Explainable Hardware Trojan Localization at LUT Level》 TCAD’2025 《LUT层次的精细可解释木马定位》 期刊介绍 《IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems》&#xff08;TCAD&#xff09;是集成电路…...

Python实现鼠标点击获取窗口进程信息

最近遇到挺无解的一个问题&#xff1a;电脑上莫名其妙出现一个白色小方块&#xff0c;点击没有反应&#xff0c;关也关不掉&#xff0c;想知道它和哪个软件有关还是显卡出了问题&#xff0c;也找不到思路&#xff0c;就想着要不获取一下它的进程号看看。 于是写了一个Python脚本…...

Mac安装jdk教程

在Mac上安装JDK&#xff08;Java Development Kit&#xff09;的步骤如下&#xff1a; 一、下载JDK安装包 访问Oracle官网&#xff1a; 打开浏览器&#xff0c;访问Oracle JDK下载页面。 选择JDK版本&#xff1a; 根据你的开发需求选择合适的JDK版本。例如&#xff0c;JDK 11…...

【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式

与设计模式相处&#xff1a;真实世界中的设计模式 设计模式是软件开发中的经典解决方案&#xff0c;它们帮助我们解决常见的设计问题&#xff0c;并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中&#xff0c;作者通过生动的案例和通俗的语言&#xff0c;深入…...

JDBC 完全指南:掌握 Java 数据库交互的核心技术

JDBC 完全指南&#xff1a;掌握 Java 数据库交互的核心技术 一、JDBC 是什么&#xff1f;为什么它如此重要&#xff1f; JDBC&#xff08;Java Database Connectivity&#xff09;是 Java 语言中用于连接和操作关系型数据库的标准 API。它允许开发者通过统一的接口访问不同的数…...

Vue父子组件传递笔记

Vue父子组件传递笔记 props 父组件向子组件进行传值 &#xff08;1&#xff09;在父组件APP.vue <template><div> <!-- 给子组件Child.vue传递以msg的信号&#xff0c;传递的信息内容为messages --><Child :msg"messages"></Child>…...

文件上传漏洞与phpcms漏洞安全分析

目录 1. 文件上传漏洞简介 2. 文件上传漏洞的危害 3. 文件上传漏洞的触发条件 1. 文件必须能被服务器解析执行 2. 上传目录必须支持代码执行 3. 需要能访问上传的文件 4. 例外情况&#xff1a;非脚本文件也可能被执行 4. 常见的攻击手法 4.1 直接上传恶意文件 4.2 文件…...

【deepseek】辅助思考生物学问题:ICImapping构建遗传图谱gap较大

基于ICImapping构建遗传图谱的常见问题与解答 问题一&#xff1a;染色体两端标记间遗传距离gap较大 答疑一 标记密度不足&#xff08;如芯片设计时分布不均&#xff09;重组概率低基因组结构变异软件算法限制 Deepseek的解释 #### 1. **染色体末端的重组率较低** - **现象*…...

linux磁盘非lvm分区

linux磁盘非lvm分区 类似于windows划分C盘、D盘&#xff0c;并且不需要多个磁盘空间合一 图形化直接分区 通过gparted 这个提供直观的图形化分区&#xff0c;类似windows的磁盘管理工具 下载方式&#xff1a; 乌班图/debian系列&#xff1a; sudo apt install gparted红帽…...

Windows下sql server2012安装流程

准备工作 确认系统要求&#xff1a;确保 Windows 系统为 Windows 7 或更高版本&#xff0c;且为 64 位操作系统&#xff0c;CPU 在 2GHz 以上&#xff0c;内存 4GB 或更高。 下载安装包&#xff1a;从微软官方网站或其他可靠渠道下载 SQL Server 2012 安装包。 关闭相关软件&am…...

css之英文换行样式

在 CSS 中&#xff0c;要实现英文文本自动换行但不从单词中间断开的效果&#xff0c;可以使用 word-wrap 或 overflow-wrap 属性。以下是相关的 CSS 属性和它们的配置&#xff1a; 使用 overflow-wrap 或 word-wrap /* This property is used to handle word breaking */ .wo…...

绝美焦糖暖色调复古风景画面Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 通过 Lr 软件丰富的工具和功能&#xff0c;对风景照片在色彩、影调等方面进行调整。例如利用基本参数调整选项&#xff0c;精准控制照片亮度、对比度、色温、色调等基础要素&#xff1b;运用 HSL 面板可对不同色彩的色相、饱和度以及明亮度进行单独调节&#xff1b;利…...

文件解析:doc、docx、pdf

1.doc解析 ubuntu/debian系统应先安装工具 apt-get install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr \ flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig pip install textract解析&#xff1a; import te…...

计算机网络基础:VLAN(虚拟局域网)

1. VLAN 虚拟局域网&#xff1a;可以用来隔离广播 广播和广播域&#xff1a; arp 出不了路由器&#xff0c;只能攻击内网 路由器可以隔离广播&#xff08;物理隔离&#xff09;缺点是成本高、不灵活 2. VLAN 隔离广播 静态VLAN&#xff1a;基于交换机端口号划分 动态VLAN&am…...

C++学习笔记(十一)——循环结构

循环结构的作用 循环结构用于重复执行某一代码块&#xff0c;直到满足特定条件后退出循环。 C 提供了以下三种循环结构&#xff1a; for 循环&#xff08;确定次数的循环&#xff09;while 循环&#xff08;条件控制的循环&#xff09;do-while 循环&#xff08;至少执行一次的…...

【C++】二叉树相关算法题

一、根据二叉树创建字符串 题目描述&#xff1a; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 “()” 表示&#xff0c;转化后需要省略所有…...

物联网IoT系列之MQTT协议基础知识

文章目录 物联网IoT系列之MQTT协议基础知识物联网IoT是什么&#xff1f;什么是MQTT&#xff1f;为什么说MQTT是适用于物联网的协议&#xff1f;MQTT工作原理核心组件核心机制 MQTT工作流程1. 建立连接2. 发布和订阅3. 消息确认4. 断开连接 MQTT工作流程图MQTT在物联网中的应用 …...

【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程

智能 AI 旅游推荐平台开源文档 项目前端地址 ☀️项目介绍 智能 AI 旅游推荐平台&#xff08;Intelligent AI Travel Recommendation Platform&#xff09;是一个利用 AI 模型和数据分析为用户提供个性化旅游路线推荐、景点评分、旅游攻略分享等功能的综合性系统。该系统融合…...

【Node.js入门笔记1---初始Node.js)】

Node.js入门笔记1 初始Node.js1.Node.js简介2.Node.js中js的运行环境3.Node.js 可以做什么4.Node.js 怎么学 初始Node.js 1.Node.js简介 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境&#xff0c;用于在服务器端运行 JavaScript 代码。它让开发者可以用 Java…...

自学Java-JavaSE基础加强(多线程)

自学Java-JavaSE基础加强&#xff08;多线程&#xff09; 一、创建线程1、方式一&#xff1a;继承Thread类小结 2、方式二&#xff1a;实现Runnable接口小结 3、方式三&#xff1a;实现Callable接口4、小结 二、线程的常用方法三、线程安全1、认识线程安全2、模拟线程安全问题3…...

数字后端培训实战项目六大典型后端实现案例

Q1:请教一个问题&#xff0c;cts.sdc和func.sdc在innovus用如何切换&#xff1f;在flow哪一步切换输入cts.sdc&#xff1f;哪一步切换到func.sdc&#xff0c;具体如何操作&#xff1f; 这个学员其实就是在问使用分段长clock tree时具体的flow流程是怎么样的&#xff1f;针对时…...