新闻详情

新闻详情

首页 / 资讯中心 / 详情

InstallShield 6.0打包VC++ 6.0老项目:从注册表到兼容性的实战指南

发布时间:2026/9/8 11:24:15来源:尧图网络
InstallShield 6.0打包VC++ 6.0老项目:从注册表到兼容性的实战指南
简介InstallShield for VC 6.0 是一套专为Visual C 6.0开发的安装包制作工具面向需要在Windows平台发布桌面应用程序的初、中级VC开发者。借助它可将调试完毕并编译为Release版的EXE文件通过Tools菜单中的InstallShield Wizard快速生成专业安装程序有效简化分发流程。压缩包共27个文件、约10MB内容涵盖核心安装引擎exe、dll、数据封装cab、dat、bin、配置脚本ini、ins、lid以及界面资源gif、bmp、jpg等类型能完整支撑从启动引导、文件解压到安装界面定制的全过程。目前已有1170人学习下载。读者可通过内置的脚本、数据文件和示例资源自主调整安装路径、注册表写入、快捷方式生成等选项并参考安装引擎与配置文件排查打包异常避免从零摸索带来的踩坑成本是制作Windows安装包的实用配套工具。1. 老项目的打包难题为什么绕不开 InstallShield如果你还在维护 VC 6.0 时代的遗留系统大概率会在某个阶段被“怎么给客户部署环境”这件事卡住。程序编译出来只是一个干净的 EXE 或 DLL客户机器上没有 MFC 运行库、没有 ODBC 驱动、没有注册表项、没有快捷方式程序根本跑不起来。更麻烦的是有些客户机器上还残留老版本的文件覆盖还是保留怎么判断这些问题都是纯手写脚本解决不了的。InstallShield 在 2000 年前后几乎是 Windows 安装包制作的事实标准尤其是和 Visual C 6.0 配合的 InstallShield for VC 6.0 这个版本它深度集成了 VC 6.0 的工程文件。你在 VC 6.0 里生成工程时可以直接调用 InstallShield 的工程自动把 Release 版本的输出文件、依赖的 MFC DLL、运行库文件一起收集进安装包。这就是它和后来那些通用打包工具最大的区别——它懂 VC 6.0 的项目结构而不是让你手动把文件一个个拖进去。这篇内容适合谁一类是还在用 VC 6.0 维护老系统的开发者另一类是接手了历史包袱、需要把旧程序重新打包到新环境比如 Windows 10/11的人。前者可以直接复用后者更需要理解这里面的兼容性陷阱。我在这块踩过的坑不少下面按实际操作顺序把这些经验和原理拆开讲。2. 核心思路与选型考量2.1 为什么不用简单的 Setup 脚本而选 InstallShield早期存在很多“轻量”打包方案WinRAR 自解压、Inno Setup、NSIS甚至直接写 bat 脚本复制文件。这些方案在 2000 年左右同样流行但它们的短板在于——对系统资源的处理是半自动的。注册表写入、服务注册、COM 组件注册、ODBC 数据源配置、文件关联这些不是复制文件就能完成的。InstallShield 的价值在于它有一套完整的脚本语言InstallScript可以做到在安装前检测系统版本、磁盘空间、已安装的补丁包在安装过程中动态决定复制哪些文件、写哪些注册表项在卸载时反向清理所有添加的内容包括注册表、共享 DLL 引用计数、开始菜单项支持自定义对话框让客户在安装时选择安装路径、选择组件我见过不少老项目用 WinRAR 自解压糊弄过去结果客户卸载时留下一堆垃圾升级安装时又因为 DLL 版本冲突出问题。用 InstallShield 解决这类问题虽然前期配置复杂但后期维护的体感舒服非常多。2.2 InstallShield for VC 6.0 的版本差异和安装环境InstallShield 在 6.0 时代家族产品线分为 Express、Professional、Premier 几个等级。Express 最简单适合纯文件复制Professional 以上才支持 InstallScriptPremier 还带一个叫 MSI 工程Windows Installer的支持。如果你手上拿的是集成在 Visual Studio 6.0 企业版里的 InstallShield那一般是 Professional 级别足够覆盖绝大多数场景。Visual Studio 6.0 自带的是 InstallShield 6.0/6.1 的定制版可以直接从 VC 6.0 的“File - New - Projects - InstallShield Project Wizard”进入。安装这个工具的注意点它本身是一个 32 位程序在 Windows 10/11 上安装时有时安装程序会假死尤其是当系统有 UAC 时。必须右键管理员权限运行安装程序否则安装过程写注册表HKEY_LOCAL_MACHINE\SOFTWARE\InstallShield会失败。安装完成后最好禁用桌面主题和兼容性助手否则脚本编辑器可能无法打开。2.3 两个典型的工程模式InstallScript vs. MSIInstallShield 6.0 的工程主要分为两类观察到不少同行在这里吃了不少苦头需要讲清楚它们的区别。第一类是InstallScript 工程也叫 Script 工程它使用 InstallScript 脚本语言控制整个安装流程生成的 setup.exe 是自包含的可以在旧 Windows甚至 Win98上直接运行。第二类是MSI 工程它对应的是 Windows Installer 体系生成 .msi 文件由系统服务 Windows Installer 来执行。MSI 的优点是可管理性更强支持活动目录部署但缺点也很明显——调试麻烦不好随时修改 UI而且 VC 6.0 时代的 InstallShield 生成的 MSI 在 Windows 10 上偶尔有兼容性问题。我的建议是如果你只是打包一个普通的 MFC 桌面程序用 InstallScript 工程省心。如果公司内部有域控、需要大规模推送安装那再考虑 MSI。3. 实操过程从创建工程到生成安装包3.1 创建工程并与 VC 6.0 集成打开 VC 6.0进入 File - New - Projects选择“InstallShield Project Wizard”。这里需要注意如果没有这个选项说明安装的不是企业版 VC 6.0而是标准版需要在 VC 6.0 的安装盘里补装 InstallShield 组件。向导会询问项目名称和位置要安装的公司名和默认安装目录程序的应用程序类型Regular 组、MFC 组、ActiveX 组等是否生成卸载入口建议选择 Yes没有卸载程序会被客户吐槽需要包含的组件建议先不要选太多默认即可向导结束后InstallShield 会生成一个工程左侧的工作区包含Scripts、Components、Setup Types、Files、Resources、Media 等节点。到这里基石已经铺好下一步是处理文件列表。3.2 添加文件手动拖拽和 VC 工程集成InstallShield 6.0 的“Files”节点下有一个“General”目录树目标机器的目录Program Files、Windows、System32 等有对应的树状结构。你需要把程序文件从本地拖到目标位置。但这里的关键是——如果你用的是 VC 6.0 的工程向导创建的 InstallShield 工程它可以自动关联 VC 工程的输出文件。在资源管理器中右键 InstallShield 工程 - Project Settings - VC Directories 里指定 VC 工程路径这样编译完 VC 工程后InstallShield 在构建时会自动拉取最新的 EXE 和 DLL不需要每次手动去拖。我实际用下来自动关联对单个 EXE 加几个 DLL 的小项目很顺手。但如果你有十几个 DLL 分散在不同目录自动关联反而容易漏文件这种情况下还是手动拖拽更可控。手动拖拽时注意所有依赖文件必须一个一个确认尤其注意 ODBC 驱动、Inf 文件、帮助文件这些边缘资源漏一个客户现场就要哭。3.3 注册表、快捷方式和文件关联的设置在 InstallShield 6.0 中Resources 节点下可以设置注册表项、快捷方式、INI 文件和文件关联。注册表设置方式很直观左侧是注册表树右侧是具体键值。你需要把程序运行需要的注册表项建立好。一个 MFC 程序通常需要写 HKEY_CURRENT_USER\Software\公司名\程序名 的配置项如果是 COM 组件还需要在 HKEY_CLASSES_ROOT 下注册 CLSID。注意InstallShield 6.0 的注册表编辑器对字符串类型区分 REG_SZ 和 REG_EXPAND_SZ如果值里有 %SystemRoot% 这种环境变量必须选 REG_EXPAND_SZ否则安装后环境变量不会展开程序启动就会出错。快捷方式在 Resources - Shell Objects 里设置。Windows 10 上要注意InstallShield 6.0 默认把快捷方式放到“开始菜单\程序”这里的路径在 Windows 10 上仍然兼容只是显示上有差异。另外如果你想创建桌面快捷方式需要引用一个特殊的目录FOLDER_DESKTOP 或 FOLDER_COMMON_DESKTOP不要用硬编码路径否则不同版本 Windows 上安装出来的位置不对。文件关联在 Resources - File Extensions 里添加。比如你的程序处理 .abc 格式的文档在扩展名设置里绑上你的 EXE写入关联图标。这里有一个经典坑关联的图标路径不能写死成 C:\Program Files\YourApp\App.exe而应该用程序安装目录的转义符号。InstallShield 脚本中用TARGETDIR表示安装目录在界面设置里则要选“FOLDER_PROGRAM_FILES”你的子目录而不是直接敲路径。3.4 安装脚本的核心逻辑InstallScript 语言类似 C有函数、变量、流程控制。一个典型的安装流程如图所示不开图用文字描述OnBegin初始化变量OnFirstUIBefore显示欢迎对话框、许可协议、客户信息、安装目录选择OnFirstUIAfter执行文件复制、注册表写入、快捷方式创建OnMoved如有必要运行一些配置文件修改工具OnUninstall删除文件、注册表项、快捷方式在实际开发中最常用的函数是// 判断磁盘空间是否足够 if (DiskSpace(C:, 102400) 0) then // 100MB 的整数倍 MessageBox(磁盘空间不足, WARNING); abort; endif; // 复制单个文件 CopyFile(Source.dll, TARGETDIR ^ Bin); // 写注册表 RegDBSetKeyValue(HKEY_CURRENT_USER\\Software\\MyApp, Version, 1.0); // 创建快捷方式 AddIcon( FOLDER_PROGRAMS ^ My Company, MyApp.lnk, TARGETDIR ^ MyApp.exe, , 0, , 0 );其中^是路径拼接运算符等价于PathAddBackslash。很多新手在这里容易写错直接写C:\Program Files\MyApp硬编码路径结果客户在安装时改了路径程序就找不到文件。注意InstallShield 在安装时所有的路径都必须通过系统变量引用如 TARGETDIR、WINDIR、SYSDIR不要用固定盘符路径。硬编码路径是打包大忌。3.5 打包 VC 6.0 运行库的两种方式VC 6.0 编译的程序在目标机器上需要 MFC42.dll、MSVCRT.dll、MSVCP60.dll 这些运行库。打包方式有两种各有利弊。方式一静态链接。在 VC 6.0 的 Project Settings - C/C - Code Generation - Use run-time library 里选 Multithreaded (/MT)这样 MFC 和 CRT 代码直接编进 EXE不需要单独打包运行库。缺点是程序体积变大优点是完全省心非常适合小工具类软件。方式二动态链接。程序使用 /MD 编译需要把 MFC42.dll、MSVCRT.dll 等一并打进安装包。InstallShield 6.0 自带一个“Object Merge Module”功能在 Components 节点下可以自动合并 MFC 运行库把 DLL 放到目标机器的 System32或 WinSxS目录。实际经验如果目标机器可能是 Win10/Win11动态链接更坑。Windows 10 自带了一些 CRT 的更新版本老版的 MFC42.dll 和新版混装会造成各种稀奇古怪的崩溃。我的建议是有条件就改静态链接没条件就把所需 DLL 放在程序自己的目录不要扔进 System32尽量做到目录隔离。3.6 支持多语言和多平台InstallShield 6.0 支持多语言安装界面。VC 6.0 时代流行做英文、简体中文双语包。在 Media 节点下你可以配置多个语言版本生成不同语言的 Setup.exe。这里有个独特点InstallShield 6.0 的多语言配置基于语言通道方法是在 Installation Designer 的 Installation 节点里添加“Language”标签的内容。每个语言版本有独立的字符串表安装时根据系统语言自动选择。对老程序来说多语言主要是满足港台客户需求他们常用繁体系统而 VC 6.0 编译的程序如果用了 ANSI 字符集在繁体系统上会乱码。处理这种问题需要把字符串统一成 Unicode 或用 Unicode 版本的 MFC。InstallShield 本身不解决字符集问题它只是把界面语言改对程序内部的编码问题得在源码层面解决。4. 生成安装包与调试排错4.1 Media 构建生成安装包的黄金步骤在 InstallShield 6.0 中“Media”节点负责生成最终的安装包。你需要在 Media 节点下新建一个 Media 发布指定安装包类型CD-ROM、单文件Web、网络安装等磁盘空间分包大小是否包含更新检查老版本用 Update Service不推荐开启兼容性差压缩率选择构建流程右键点击 Media 名称 - Build。构建日志会显示具体在复制哪个文件、写哪个注册表项时出问题。常见报错有两种一种是找不到文件另一种是脚本编译错误。脚本编译错误是最耗时的。InstallShield 6.0 的脚本编译器不支持断点调试至少免费版不行唯一的调试手段是在脚本里写MessageBox或用WriteLogFile输出到文件。没有经验的话很容易在这里浪费好几天。实操建议在 OnFirstUIAfter 里加一个日志函数把安装流程分步写入日志文件比如WriteLogFile(C:\\Temp\\install.log, 开始复制文件)安装结束后查看日志定位卡在哪一步。4.2 构建后自查在模拟环境中测试安装安装包生成后至少在以下场景做验收测试全新机器安装未装过该程序已安装旧版本做覆盖升级卸载后再装未联网机器管理员权限与普通用户权限各跑一次覆盖升级是最容易出问题的InstallShield 6.0 默认看到目标文件存在就直接覆盖如果同一程序有两个版本共存文件版本不一致时会弹出“是否覆盖”的对话框。这个对话框的文案处理不好客户看了会以为出错。建议在 Components 节点中对关键组件比如主 EXE设置“Always Overwrite”避免版本比较逻辑在旧系统上出偏差。同时如果升级需要清空某些旧注册表项可以在 OnBegin 里先直接删掉旧键值再从头写入而不是依赖安装器的同步机制。4.3 常见问题排查速查表这里把实际工作中踩过的坑整理成一张表方便查阅。现象原因解决安装后程序找不到 MFC42.dllVC 工程中 MFC 库未包含或未打包到目标目录在 Components 中确认 MFC 库组件已选中或者改成静态链接升级安装时出现“另一个程序正在使用此文件”目标 EXE 正在运行安装脚本中先检测进程并提示关闭或用 MoveFileEx 延迟替换安装后快捷方式指向错误目录快捷方式路径用了硬编码改用TARGETDIR或 InstallShield 自带目录变量卸载后残留大量文件和注册表项卸载脚本未完整定义删除项在 Uninstall 中检查文件列表、注册表项列表逐一确认删除规则在 Win10 上安装过程中报错“指定的路径无效”InstallShield 6.0 对长路径、特殊字符处理有缺陷安装目录不要用中文、空格尽量控制在 8.3 短路径内繁体系统乱码程序使用 ANSI 字符集繁体系统代码页不同编译成 Unicode 版本或在源码中使用并转换字符集4.4 Windows 10/11 上老版 InstallShield 的兼容性对策InstallShield 6.0 生成的安装包在 Windows 10 上基本能跑但有几个细节需要留意。Windows 10 的 UAC 会导致安装程序默认以普通权限运行。如果安装包需要写注册表或 Program Files安装过程会触发提权弹窗。InstallShield 6.0 自带的主 exe 可以通过右键属性设置“管理员身份运行此程序”来缓解但在客户机上没办法每台都手动设置。一个有效的方法是写一个前置引导程序Bootstrapper先用 VC 6.0 写一个 Launcher编译出来很小它请求管理员权限然后调用 InstallShield 安装包。这样客户只需要运行 Launcher不用手动处理 UAC。网上有些“提权工具”的思路与此类似略微注意前面提过的安全规范自己写不受限。另外Windows 10 上 InstallShield 6.0 生成的卸载程序卸载后开始菜单里的快捷方式有时不会自动刷新这是系统索引问题不是安装包错误。排查时可以先刷新桌面不要贸然认为卸载脚本没执行。5. 旧工具新环境下的一些特殊情况5.1 在 Windows 10 x64 上从 32 位视角看路径问题这是很多老安装包的共同痛点InstallShield 6.0 是 32 位程序在 x64 Windows 上写入注册表时如果写到 HKEY_LOCAL_MACHINE\SOFTWARE\XXX会被系统重定向到 Wow6432Node 节点。InstallShield 6.0 的脚本和 UI 都不会主动处理这个重定向因此装了 64 位系统后32 位程序读注册表时根路径仍是其视角下补全后的位置导致从不同位数程序写入读取互相看不到。解决办法有三种安装包中同步写两个位置HKLM\SOFTWARE\XXX 和 HKLM\SOFTWARE\Wow6432Node\XXX程序代码中通过 KEY_WOW64_64KEY flag 强制读写 64 位注册表视图既然代码还在维护把注册表改用配置文件存一劳永逸。我见过的老项目里第三个方案最实用。毕竟 VC 6.0 的程序读注册表本来就有缓存问题用 INI 或 XML 配置可以减少系统依赖。5.2 批量打包和自动构建的思路如果你的程序需要频繁发布纯手工在 InstallShield 中点鼠标打包效率太低。InstallShield 6.0 支持命令行编译IsSCC.exe myproject.ism /Build。可以把它加到 VC 6.0 的 custom build 步骤里或者写一个批处理脚本定时执行。一个简单的脚本思路echo off REM 先编译 VC 工程 msdev MyApp.dsp /MAKE MyApp - Win32 Release /OUT build_log.log REM 再编译 InstallShield 工程 C:\Program Files\InstallShield\Professional Edition\Redistributable\IsSCC.exe MyApp.ism /Build REM 拷贝最终安装包 copy Media\MyApp\Disk Images\disk1\setup.exe D:\release\MyApp_Setup_%date:~0,4%%date:~5,2%%date:~8,2%.exe这样发布时只需要跑一下脚本就能得到带日期版本的安装包。注意 InstallShield 安装路径在不同版本上有差异写脚本前先 where 一下确认真实路径别直接抄我的绝对路径。6. 还有一些必须提前交代的坑6.1 安装目录带空格的处理很多客户的安装路径是 C:\Program Files\你的程序名中间有空格。如果 VC 6.0 代码里使用绝对路径拼接大概率会出问题。InstallShield 6.0 提供的所有路径变量都自带引号处理但你自己在脚本中拼接路径时如果要调用外部命令比如注册 DLL必须加双引号LaunchAppAndWait(SYSDIR^cmd.exe, /c \ TARGETDIR^register.bat\, WAIT);这里的引号嵌套很容易出错我建议直接用 InstallShield 自带的LaunchAppAndWait( TARGETDIR^regsvr32.exe, /s \ TARGETDIR^MyCOM.dll\ , WAIT);反而更可控。6.2 环境变量和系统目录的引用InstallShield 6.0 有系统变量表比如TARGETDIR安装目录SYSDIR系统目录Windows\System32WINDIRWindows 目录WINSYSDIR在 x64 上可能被重定向建议脚本里在OnBegin阶段把关键路径写入日志安装时客户报错后日志能帮你快速定位问题这种习惯能省掉大量沟通成本。在安装过程中安装目录由用户自定义程序的数据库连接、配置文件的默认路径也要跟着变。如果开发时用了绝对路径写死配置安装包做再好也白搭这一点是最容易被忽略的应用自身逻辑必须基于相对路径比如 GetModuleFileName 获取当前 EXE 路径或者读取注册表里安装时写入的安装路径。6.3 对老工具版本的理性看待放眼今天仍然会有 InstallShield、Advanced Installer、Inno Setup 等替代产品不断更新但改造旧工程的成本往往高过保留老工具的成本。InstallShield 6.0 虽然在 UI 体验、多语言支持上落后于现代工具但对于成熟的 MFC 项目而言它生成安装包的逻辑和 InstallScript 语言在 20 年里没什么本质变化很多老参数、老的卸载清理逻辑都是经过无数次客户现场验证的。如果你面对的是历史包袱特别深的项目用旧工具不一定丢人。踩过几次坑之后我的体会是像 InstallShield 6.0 这种老工具关键价值在于它能准确识别并处理 MFC 运行库、COM 注册、注册表重定向这些旧系统的遗留问题这正是现代工具反而容易忽视的。老程序员留下来的那套安装脚本里面对系统细节的考虑放到今天依然值得敬畏。7. 最后的实操小技巧按老规矩最后分享一个每次打包我都会用上的小技巧。制作一个“环境检查”功能放在安装第一步。很多客户拿到安装包后不会看说明上来就直接下一步。如果他的机器缺少 VC 6.0 运行库、或者系统版本过旧安装会失败得很莫名其妙。在 InstallShield 脚本的 OnFirstUIBefore 阶段手动检测// 检查 MFC42.dll 是否存在 if (!FileExists(WINSYSDIR ^ MFC42.dll)) then MessageBox(未检测到 MFC 运行库请先安装 VC 6.0 运行库。, WARNING); abort; endif; // 检查系统版本 szVersion GetSystemInfo(SYSINFO_VERSION_NUMBER, SYSINFO_SYSTEM); if (szVersion 5.1) then MessageBox(建议在 Windows XP 及以上系统安装。, WARNING); endif;把检查逻辑放在最前面客户就算不看说明安装器也会主动提示他缺什么。实际操作中这个功能帮我挡掉了至少三成“安装失败”的工单。另一个技巧是关于目录的处理在安装完后把安装日志写进程序目录下比如 install.log卸载时不要删。客户如果遇到问题你远程让他把日志文件发过来比他一顿描述“不知道点了什么”靠谱得多。就在上个星期我用这套流程给一个用了十多年的 MFC 旧程序打包出了 Windows 11 上可以正常跑起来的安装包。过程中依旧遇到了 InstallShield 6.0 在 Win11 下的闪退问题但用管理员模式兼容模式指定 Win7 运行后它依然稳稳地把所有文件、注册表项和卸载逻辑处理得明明白白。这就是老工具的价值只要摸清它的脾气老程序的新分发场景依然可以放心交给它。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

多模态视觉大模型开发实战:从环境搭建到行为识别落地 2026/9/8 12:06:25

多模态视觉大模型开发实战:从环境搭建到行为识别落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
GCAM全球变化分析模型指南:从核心原理到碳税情景模拟实操 2026/9/8 12:06:25

GCAM全球变化分析模型指南:从核心原理到碳税情景模拟实操

简介:GCAM-全球变化分析模型由联合全球变化研究所(JGCRI)主导开发,是一款面向全球变化研究的高级综合评估模型,能够在一个统一的经济框架内表征世界各区域以及能源、经济、气候、土地利用、水资源等部门的动态关联&…

阅读更多 →
Java对接IEC 61850实战:从MMS通信到SCL建模与排障 2026/9/8 12:06:25

Java对接IEC 61850实战:从MMS通信到SCL建模与排障

简介:针对IEC 61850标准的Java端实现,这套tgz压缩包为电力自动化开发者提供了一套可参考的代码工程,重点解决变电站与智能电子设备(IED)间数据通信的Java编程问题。资源共427个文件,压缩包约1.66MB&#xf…

阅读更多 →
OpenCode实战指南:终端AI Agent的多模型自由与高效编码 2026/9/8 12:06:25

OpenCode实战指南:终端AI Agent的多模型自由与高效编码

最近终端里的AI编码助手突然多了起来,Codex CLI、Claude Code一个接一个往外冒,我本来以为又是一阵热闹,结果在试了OpenCode之后,发现这玩意儿确实有点东西。它是SST团队开源的一个终端AI Agent,主打“模型自由”&…

阅读更多 →
从零构建轻量级Agent运行内核:hermes-agent设计实战与踩坑记录 2026/9/8 12:06:25

从零构建轻量级Agent运行内核:hermes-agent设计实战与踩坑记录

先铺垫一下背景:今年我一直在折腾个人智能体,前后试过 LangChain 那套全家桶,也试过自己从零撸编排逻辑。说实话,框架用起来确实省事,但遇到复杂一点的业务场景,项目就会变得特别拧巴——不是编排代码和业务…

阅读更多 →
Mac远程连接Windows:Microsoft Remote Desktop与AccessClient搭配指南 2026/9/8 12:03:24

Mac远程连接Windows:Microsoft Remote Desktop与AccessClient搭配指南

简介:这是一份面向macOS用户的远程桌面工具合集,打包了微软官方Remote Desktop客户端与AccessClient应用,用来解决从苹果电脑远程连接Windows桌面、服务器以及安全访问企业内部网络资源的常见需求。压缩包内含20个文件,整体约62.8…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞