[.NET] 控制只启动单个指定外部程序

独立观察员 2019-06-12 13:44:00 阅读数:34 评论数:0 收藏数:0

独立观察员 2019 年 6 月 12 日

有的时候我们程序需要启动外部程序来配合实现某些功能,比如启动一个 Cef 相关程序来承载网页。那么如果那个外部程序并没有实现单例启动,我们程序去启动它的时候就有可能启动了多个,这样轻则造成系统卡顿,重则引发 Bug。这肯定是我们不想看到的,所以本文来探讨如何在启动某个外部程序时,始终只会启动一个。

 

先来看看外部程序(其实不用关心),其中有一个这样的类:

     public class BoundObject
     {
         [DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]
         static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);
  
         /// <summary>
         /// 是否关闭:1 - 隐藏  2 - 关闭
         /// 用法:onclick="javascript:alert ('1');BoundObject.CloseFlag ('1');"
         /// </summary>
         public void CloseFlag(string flag)
         {
             if (flag == "")
             {
                 System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("CefApp");
                 if (processes.Length >= )
                 {
                     Console.WriteLine($"当前系统中有该程序在运行,将隐藏该程序");
                     //ShowWindow (processes [0].MainWindowHandle, 0);  // 隐藏;
                     ShowWindow(processes[].MainWindowHandle, );    // 最小化;
                 }
             }
             else if (flag == "")
             {
                 Console.WriteLine($"程序即将退出...");
                 Environment.Exit();
             }
         }
     }

 

关键的就是 flag == “1” 里面的内容,先获取所有名为”CefApp” 的进程,如果大等 1,表示进程已经存在,这里是将其隐藏,用的是系统的 ShowWindow 方法。

 

另外,与本文无关,但是有助于理解使用场景的是:该程序为一个 Cef 相关程序,以上的类可用于让 Cef 中承载的网页能够通过 JS 调用到这个 C# 的方法,进而进行隐藏或关闭控制。相关设置如下:

 CefSharp.Wpf.ChromiumWebBrowser webView = new CefSharp.Wpf.ChromiumWebBrowser();
  
 var bindScriptOption = new CefSharp.BindingOptions();
 bindScriptOption.CamelCaseJavascriptNames = false;
  
 webView.RegisterJsObject("BoundObject", new BoundObject(), bindScriptOption);

 

回归正题,现在来看看主程序里面:

 System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("CefApp");
 if (processes.Length >= )
 {
     Console.WriteLine($"当前系统中已有该程序在运行,将唤起该程序");
     ShowWindow(processes[].MainWindowHandle, ); // 对隐藏程序不起作用;
 }
 else
 {
     string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "External", "Cef", "CefApp.exe");
     System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(path);
     info.WorkingDirectory = Path.GetDirectoryName(path);
     System.Diagnostics.Process.Start(info);
  
     Thread.Sleep( * );
 }

 

也是获取所有”CefApp” 进程,如果有则启动之前最小化的该程序,没有则启动新程序。因为使用 ShowWindow 隐藏程序后无法再显示出来,所以只能配合最小化来使用,所以两个程序都是全屏运行效果会比较好。

 

以上就是本文全部内容。

 

http://dlgcy.com/dotnet-single-program/


版权声明:本文为[独立观察员]原创文章
转载请带上:http://copyfuture.com/blogs-details/20190612134954293kaeogm5mmg8hc1l
或:https://www.cnblogs.com/weiliuhong/p/dotnet-single-program.html



  1. 首张黑洞照片将面世,我们是第一批欣赏黑洞的人吗?
  2. 非洲是国产厂商最后的红利市场 传音的好日子要过去了
  3. 血压高压135低压95,需要服药控制吗?来看看临床医生怎么说
  4. 浏览器中的异步事件轮询机制
  5. 四川男篮“反思录”| 主帅尹逵:缴了学费,该轻装上阵了
  6. OSI参考模型总结
  7. 爬虫之Scrapy框架介绍
  8. 斗鱼直播黑产:有软件可群发弹幕,热度值20元起刷
  9. 搞个这样的APP要多久?
  10. 二战陆战十大明星兵器系列之八 德国MG34/42通用机枪
  11. F#周报2019年第19期
  12. 他是拥有24房姨太太的大军阀,曾经的混世魔王,如今成英雄人物
  13. 李彦宏后退,马东敏全面执掌百度投资?
  14. 福山雅治被曝将离婚,当初宣布结婚时网络瘫痪,为何如今要离婚
  15. python 学习资料汇总
  16. 细数108好汉中那些受吴用迫害最惨的三个人
  17. 新天皇德仁爱女爱子公主,只因女性身份无缘皇位,联合国打抱不平
  18. 垃圾回收机制
  19. grep、find命令整理
  20. Space X载人龙飞船发射成功,我们正在迎来“大航天时代”
  21. 50个非去不可的小镇,中国上榜3个
  22. 唐代以后的传国玉玺都是假的?这是怎么回事?又长见识了!
  23. 过度教育,正在毁掉家庭的幸福
  24. 除印度外,新西兰、坦桑尼亚、缅甸、蒙古等国GDP增速也超过中国
  25. 深网 | 对话拼多多百亿补贴项目宗辉:二选一不是最大的挑战
  26. 欢聚时代宣布完成对BIGO的收购 总交易额约14.5亿美元
  27. Postgres安装、设置及创建用户赋予权限
  28. 张云雷调侃地震被官媒点名,但他的部分粉丝依然在颠倒黑白
  29. Switch版《堡垒之夜》只能和手机玩家玩了:或因性能和配置太低
  30. 波音737Max“打补丁”软件逻辑存疑
  31. 中国留学生绑架埋尸案更多细节:危险交易 被人惦记
  32. pycharm远程同步服务器代码,并设置权限
  33. 虹软人脸识别 - faceId及IR活体检测的更新介绍
  34. 深度学习-提升模型分类性能的几点思考
  35. 72岁卡米拉手拿迷你遮阳伞,竟被女孩们认为是女王,查尔斯忙纠正
  36. 同样的输入,为什么Objects.hash()方法返回的hash值每次不一样?
  37. 简短幽默笑话,搞笑个性说说,句句戳中笑点,能让人笑岔气!
  38. 使用 HttpRequester 更方便的发起 HTTP 请求
  39. Elastic Search 安装和配置
  40. 波音是否到了最危险的时刻?
  41. Win7老用户也有份!Win10明日将迎来19年3月累积更新
  42. 中文文本预处理之结巴分词及特征化
  43. 学着在黑暗中等待黎明的到来吧
  44. 房车怎么选?10条房车选购经验分享,针对新手小白的房车选购指南
  45. 单层和双层神经网络反向传播公式推导(从矩阵求导的角度)
  46. 用百度、搜狗和360同时搜索 我们发现了一些有趣的事
  47. 宋楠:独家研判吉利“几何 A”外观内饰和配置(1)
  48. 移动端vue中使用video.js播放m3u8视频,解决自动全屏。
  49. 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
  50. day10
  51. 90后想创业,现在加入电商晚吗?看看如何做到单店月入12万
  52. Asp.NetCore轻松学-使用Docker进行容器化托管
  53. 古代枪上为什么要绑红缨?绝不是为了装饰,真实用途让人害怕
  54. Python3 多线程编程 threading模块
  55. 每年5万人自杀,全球自杀率第一国家,日本人为何如此痴迷死亡?
  56. Java并发——阿里架构师是如何巧用线程池的!
  57. git命令详解( 二 )
  58. 财政部:1-2月份印花税收入464亿元,同比下降24.5%
  59. 林语堂:人类是唯一在工作的动物
  60. 狂飙下的中国马拉松
  61. 慎重!美国'假校'新骗局,已有千名学生被遣返归国!
  62. DOTA自走棋:手游版全新玩法正式官宣,Steam老玩家预约送大礼!
  63. 调用支付jsapi缺少参数:$key0$
  64. 中国儿童身高调研报告,给我们的这些提醒,你看到了吗?
  65. 网络协议 17 - HTTPDNS:私人定制的 DNS 服务
  66. 聊聊数据库~4.SQL优化篇
  67. “乐视”超级电视正式归来:进入第五代 售后有保障
  68. 印度雷达告警:巴基斯坦大批战机突然升空,那里根本没有军用机场
  69. 读小说赚钱吗?这个年入百万
  70. 被米粉批搞「饥饿行销」 小米9今天重新开卖了
  71. 春季多雨,湿气困脾!推荐两个健脾祛湿方~
  72. “娃哭时不能抱,不哭了再抱”真的对娃好吗?别再坑孩子了!
  73. 北洋海军第一主力战舰,在当时到底是什么水平?
  74. 一文读懂链路追踪
  75. 李宇春 对视对峙
  76. 王阳明审案从来不按套路出牌,手段略显奸诈,结果令人拍案叫绝
  77. 微信公众号开发之回复图文消息(被动)
  78. 德语是怎么发展起来的,欧洲的语言其实也就那么回事!
  79. 他25岁开始使用类固醇,健美让他功成名就,但他只活到57岁!
  80. [HNOI2011]卡农
  81. 算法—插入排序
  82. 美国下一任总统黑莉是唯一人选
  83. 张兰否认被香港法院监禁一年 官司缠身的俏江南没落后卖盒饭
  84. 【排序算法】归并排序
  85. 利用idea创建一个基本的smm项目(带增删改查)
  86. 八大排序之堆排序
  87. Git常规操作
  88. 父母的情绪,正在一步步毁掉孩子
  89. 使用3D Slicer对图像进行配准
  90. 比高级脸更高级的,是关之琳袁咏仪这些港片女神的“时光滤镜”
  91. asp.net core 系列之编写自定义中间件(middleware)
  92. 数据段、数据报、数据包、帧的区别与联系
  93. 通往毁灭之门的钥匙——铀浓缩为什么是核武器制造绕不开的坎儿?
  94. Java的多态
  95. 当孩子冲你发脾气时,这5种方法胜过打骂100次,建议收藏!
  96. 华为2018年研发预算达到153亿美元 是五年前的两倍多
  97. 后端开发者的Vue学习之路(二)
  98. 难怪西方媒体如此安静!美用白磷弹轰炸叙利亚 平民死伤无法估计
  99. 为了一声赞许我们愿意付出多少,“夸夸群”里焦虑渡河的蚁族们
  100. leetcod:分割回文串(python)

  1. 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点(1744)
  2. Matlab 2019a 安装包下载以及安装和激活(1661)
  3. Delphi 开发微信公众平台 (二) 用户管理(1580)
  4. Python开发:部分第三方库无法在线安装解决方法(1550)
  5. React 与 React-Native 使用同一个 meteor 后台(1409)
  6. 《跃迁-成为高手的技术》之联机学习(1400)
  7. [深度应用]·实战掌握Dlib人脸识别开发教程(1323)
  8. 币安称 4000 万美元比特币被盗(1288)
  9. 使用 C 语言实现一个 HTTP GET 连接(1261)
  10. 独家 | 寒武纪二代芯片发布在即,提前解密如何挑战英伟达!(1259)
  11. WebGL three.js学习笔记 纹理贴图模拟太阳系运转(1215)
  12. C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序(1172)
  13. 【译】.NET Core 是 .NET 的未来(1133)
  14. 微软宣布 .NET 5 计划,支持跨平台、移动开发(1081)
  15. Linux学习(三):XShell连接虚拟机+开通22端口(1077)
  16. layui的table参数条件缓存问题(1050)
  17. 75条笑死人的知乎神回复,用60行代码就爬完了(997)
  18. Sublime Text3 最新版3207 安装及破解(918)
  19. 2019年程序员最值得学习的思维利器——任务分解(868)
  20. 10亿元巨贪山西吕梁原副市长张中生二审维持死刑判决(861)
  21. 小米有品员工签军令状,自动放弃年终奖!(815)
  22. 美方拟升级关税措施?中方:反制!(792)
  23. 科学家在太平洋水域发现奇特的“砷呼吸”微生物(788)
  24. 声明与定义的区别(786)
  25. 绿盟科技互联网安全威胁周报NSFOCUS-19-13(775)
  26. 【预警通告】Weblogic反序列化远程代码执行漏洞(769)
  27. css-博客样式初体验(741)
  28. Visual Studio 2019 正式发布,重磅更新,支持live share(728)
  29. Vue之路由(725)
  30. 【预警通告】Apache Tomcat远程代码执行漏洞CVE-2019-0232(710)
  31. 【威胁通告】Oracle全系产品2019年4月关键补丁更新(687)
  32. SQL简介及MySQL的安装目录详解(671)
  33. 5月13日公告精读丨一字跌停后,这只300亿市值的白马股出来澄清了(641)
  34. 如果想转行学习WEB前端,这样学也许更加利于找工作(632)
  35. 彭博社:苹果A13芯片即将产量 新iPhone"浴霸"无疑(575)
  36. K8s集群安装--最新版 Kubernetes 1.14.1(547)
  37. MongoDB创建数据库和删除数据库05-14学习笔记(529)
  38. 吴奇隆当爹!前妻马雅舒开心复出拍戏,颜值吸睛气质超赞(519)
  39. PJzhang:Lucifer1993的struts-scan漏洞全量检测工具(516)
  40. Confluence SSRF及远程代码执行漏洞处置手册(515)
  41. 英媒:阿里将允许外国零售商在阿里平台上销售商品(512)
  42. 舍命生子产妇吴梦丈夫怒斥:没抢肺源不是精神分裂,网友断章取义(506)
  43. Visual Studio 2019 正式发布(499)
  44. [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来.(472)
  45. 机器学习 ML.NET 发布 1.0 RC(464)
  46. 刘强东身边的CXO还有谁“幸存”(458)
  47. 阿里巴巴2018年纳税516亿元 同比增40%(458)
  48. 针对django2.2报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: ill....(441)
  49. 马光远:全球货币政策进入摇摆期,包括房价的资产价格何去何从(417)
  50. 【硬盘版】下载利器IDM+优特(uTorrent)BT下载器类(416)
  51. 太奇葩!买100元债只给1.63元购物券和1.11元现金?网友炸锅:得买多少债券才能换一双鞋(408)
  52. 雷军清华演讲实录:小米9年的创新、变革与未来(408)
  53. 我司使用了六年的分布式锁(406)
  54. Webpack 4教程 - 第八部分 使用prefetch和preload进行动态加载(392)
  55. Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!(390)
  56. 他联系叙恐怖分子“卖军火”,称能搞到2000枚导弹,关键时刻中国警察出手(390)
  57. F#周报2019年第14期(389)
  58. 《最强大脑》要垮?桑洁魏坤琳出轨细节被扒,戚薇才是神助攻(373)
  59. 直认与老公感情淡了!27岁TVB上位女星:我们不是好熟(369)
  60. 报告显示:一季度中国家庭总资产缩水而消费支出增加(360)
  61. 谁是苏小明饭局爆粗偷拍者?知情人称另有其人(348)
  62. 苹果应用商店被判垄断?然而并没有(342)
  63. 那些年,我们一起看的毛片(340)
  64. linux系统安装cdcfordb2udb(339)
  65. 迪玛希好惨!昨晚《歌手》为声入人心男团帮帮唱,却再被指控侵权(339)
  66. 华电教授孙玉兵被指与昔日同学共同学术造假,多所高校调查(333)
  67. 女友被曝插足许志安郑秀文婚姻 知情人透露马国明已下定决心分手(331)
  68. 智慧停车场系统开发建设解决方案(329)
  69. 如何设置使chrome新标签页中打开链接自动跳转到新标签页?(327)
  70. F#周报2019年第15期(321)
  71. spring-cloud-sleuth+zipkin源码探究(321)
  72. 威廉王子出轨凯特王妃闺蜜? 外媒称婚外情致兄弟反目(312)
  73. 深度学习python的配置(Windows)(311)
  74. 许志安出轨视频系蓄谋偷拍?司机被曝收40万装红外摄像头(309)
  75. 真实!这部8.5分的缉毒剧,毒贩公然贿赂警察:80万,把我放出去(306)
  76. NodeJs之邮件(email)发送(303)
  77. 视觉中国深夜道歉:全面配合监管部门彻底积极整改(301)
  78. 赌命生子九个月后,吴梦离世:前半辈子任性了,我用生命买单(299)
  79. 新更新kb4493472导致无法正常开机(294)
  80. 她做个半永久眉毛就被说整容了?(288)
  81. 山东庆云民企3000亩土地被贱卖 国企接盘拟转性(286)
  82. 韦杰落网,金诚集团终局(285)
  83. 华为推出方舟编译器 称可提升安卓系统效率(284)
  84. 机器学习基石笔记:01 The Learning Problem(282)
  85. Google AI 系统 DeepMind 高中数学考试不及格(282)
  86. 张丹峰出轨最新锤来了!毕滢的朋友圈简直刷新下限啊!(277)
  87. 不要996!程序员创建955.WLB不加班公司名单,GitHub周榜第二(275)
  88. 第一次使用VS Code时你应该知道的一切配置(274)
  89. 读书笔记之《漫画算法:小灰的算法之旅》(273)
  90. React Native升级方法——升级到最新版本0.59(273)
  91. axios(封装使用、拦截特定请求、判断所有请求加载完毕)(272)
  92. “国防”靠美国? 韩国瑜=马英九2.0? 走着瞧(269)
  93. 吹爆惠英红,《铁探》这位霸道总警司超带感!真乃港剧罕见大女主(262)
  94. 河南汝州农商行“百万丢款案”调查,两级法院现“判决书打架”(258)
  95. Codejam Qualification Round 2019(251)
  96. 堪称神器的Chrome插件(249)
  97. Weblogic CVE-2019-2647等相关XXE漏洞分析(248)
  98. Leetcode刷题指南和top100题目(248)
  99. CentOS7 部署zabbix4.2及添加客户端(241)
  100. 中国海军的逆袭之路(240)

  1. 两个搭班子的“老虎”,在省会城市大肆敛财
  2. Redis set(集合)相关命令
  3. python算法与数据结构-希尔排序(35)
  4. 火星发现高浓度甲烷:火星存在生命?看了网友评论。。。
  5. 为什么植物不会死于癌症?
  6. 阿里P8架构师详解Java性能调优策略
  7. Linux编程之gdb(二)
  8. MYSQL 第四天 表子查询
  9. mysql 有关子查询的特定关键字
  10. 多线程学习(二)
  11. iOS六年开发经验被实习生替代,所谓的“经验”一文不值 ?
  12. HDU-盐水的故事
  13. 《数据挖掘导论》实验课——实验七、数据挖掘之K-means聚类算法
  14. Python:设计模式之状态模式
  15. [清华集训2017] 生成树计数
  16. Matlab Robotics Toolbox 仿真计算:Kinematics, Dynamics, Trajectory Generation
  17. Java多线程(二):Thread类
  18. Windows性能计数器监控实践
  19. 量子逻辑门
  20. 张家口投资4000万水幕电影被指层层转包拖欠工程款,官方称正在了解情况
  21. 本田诉长城汽车两起专利侵权案开庭,索赔2000余万元
  22. MongoVUE(1.6.9.0)登录提示:Connection was refused的解决办法
  23. 山东16岁女孩中考前被父亲杀害:长期遭遇家暴,被催着早点打工挣钱
  24. 净利润暴涨221倍,两次创业成功,澜起科技冲击科创板芯片第一股
  25. SAP中的数据库表索引
  26. 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据
  27. 高阶函数 - Higher Order Function
  28. 饿了么推代扔垃圾:一单12块 跑腿范围3公里
  29. 介绍几款有用的工具
  30. OO第四单元作业小结
  31. 使用 docker 部署常用的开发环境
  32. Python————魔术方法
  33. 阿里巴巴 Java 开发手册 1.4.0
  34. 使用Docker部署Spring Boot项目
  35. Java NIO学习系列一:Buffer
  36. 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
  37. Java SimpleDateFormat 日期-时间格式参数
  38. ElasticSearch简介
  39. Redis list(列表)相关命令
  40. Java多线程(二):Thread类
  41. 每日一问:不一样的角度吐槽下 DataBinding
  42. 优动漫PAINT提取线稿功能-亮度转化透明度
  43. 黄磊不仅把黄多多教得很好,他对张子枫、彭昱畅的态度也有学问
  44. ConcurrentHashMap之tableSizeFor()方法透析(位运算运用)
  45. 郭台铭此时离开是不是一个好选择?
  46. 检察机关依法对缪瑞林、邢云、钱引安三案提起公诉
  47. Python 装饰器
  48. 不被大神Hinton认同,否定现有同行成果,谷歌这篇烧脑研究最终拿下ICML2019最佳论文
  49. 人人车再陷危局:总部裁员60% 资金迷雾仍待揭开
  50. 『Python基础』第二节: Python简介及入门
  51. 社科院:后续需求不足 部分三四线城市房价将下跌
  52. 刚刚,格力官宣再怼奥克斯!董明珠称将战斗进行到底
  53. HTTP认证之摘要认证——Digest(一)
  54. 印度要求摩托车厂商在2个星期内提交电动化转型计划
  55. 绿盟科技互联网安全威胁周报 NSFOCUS-19-25
  56. 中国银行新掌门敲定:刘连舸出任党委书记、拟任董事长
  57. 这家公司把三星、联想、微软等7家公司给告了 侵犯其触摸屏专利
  58. 比尔盖茨痛惜微软没成为安卓,但微软到底错哪了?
  59. Python:使用2to3将Python2转Python3
  60. 5个你可能不知道的html5语义化标签
  61. Redis(三)、Redis主从复制
  62. 守护“人造小太阳”!我国成功研制高速高精度激光汤姆逊散射仪
  63. 马云发布“英雄帖”:征集世界十大难题与罗汉堂西湖论剑
  64. DDD中的聚合和UML中的聚合以及组合的关系
  65. 构建和管理有效API市场的关键步骤
  66. http客户端-性能比较系列-第一篇-单线程
  67. C#中await/async闲说
  68. 1970年前中国造的最大军舰是谁?清朝一艘风帆战舰保持纪录98年
  69. C# Winfrom 简单的运用Timer控件
  70. 36小时极客嘉年华!FISCO BCOS黑客马拉松报名启动
  71. 这部8年前的电影,见证了舒淇的完整魅力
  72. NVIDIA统治了AI加速云市场 已占4大云平台97.4%份额
  73. python环境搭建
  74. Maven 虐我千百遍,我待 Maven 如初恋
  75. 二进制和十进制相互转换、位移运算
  76. OO第四单元总结暨学期总结
  77. Haproxy 开启日志记录
  78. kubernetes高级之pod安全策略
  79. 印度最大电商Flipkart拟2022年前上市 沃尔玛或退出
  80. Nordic SDK nrf_setion和nrf_section_iter模块分析
  81. pandas越来越难学,只能自己找趣味了,你该这么学,No.11
  82. 农业农村部谈乡村治理:天价彩礼让人“娶不起”
  83. skywalking-agent 与docker组合使用
  84. 冻,也不冻——冻土中的冰和水
  85. Web Api之Cors跨域(干货)---大家一定要看清我写的内容哦
  86. 金立手机加速退场:拍卖多项专利
  87. 15天全清洁能源供电,青海刷新世界纪录
  88. 13.Python略有小成(装饰器)
  89. Java并发——阿里架构师是如何巧用线程池的!
  90. 长沙中考乌龙:试题没有正确答案 所有考生满分
  91. 前端Vue项目——初始化及导航栏
  92. 淘宝服务端高并发分布式架构演进之路
  93. BigDecimal 使用浅析
  94. wget下载阿里云oss的文件报错403
  95. CMDB(资产管理系统) day1
  96. Fabric1.4源码解析:Peer节点背书提案过程
  97. 程序员除了会CRUD之外,还应该知道什么叫CQRS!
  98. Redis hash(哈希)相关命令
  99. 超级无线充:东京大学研发出3㎡+360°无线充电技术
  100. ElasticSearch导入txt文本或者json文本