-
2021-07-09 17:19:47
解决C#使用Microsoft.Office.Interop.Excel操作Excel后进程一直存在的问题
参考文章:
(1)解决C#使用Microsoft.Office.Interop.Excel操作Excel后进程一直存在的问题
(2)https://www.cnblogs.com/Linford-Xu/p/4450472.html
(3)https://www.javazxz.com/thread-6741-1-1.html
备忘一下。
更多相关内容 -
清除用QAxObject创建的Office进程示例源码
2018-10-13 22:28:34用于清除QAxObject创建的Office进程,可以区分是外部创建的Office进程还是软件内部创建的Office进程。 -
在Deepin系统下安装WPS后一直出现一个无响应的wpsoffice进程
2021-05-09 04:26:23很多人在Deepin 20 Linux系统下安装WPS新版本后都出现一个无响应的wpsoffice进程,不过似乎不是共有的问题,有些人表示没有这个。进一步说明如果把WPS给卸载掉然后再重新安装,还是会出现,如果单独把wpsoffice删除...很多人在Deepin 20 Linux系统下安装WPS新版本后都出现一个无响应的wpsoffice进程,不过似乎不是共有的问题,有些人表示没有这个。
进一步说明
如果把WPS给卸载掉然后再重新安装,还是会出现,如果单独把wpsoffice删除,则Word excel PPT就打不开了。如果把该进程强制禁止掉,它又立刻自启。参考在Linux上安装WPS Office的方法(它是Microsoft Office的免费替代品)。
可能是BUG
这个问题似乎是一个BUG,但不是每个人都有的,如果无碍事就不管它了。
附:wpsoffice进程导致系统无法关机的BUG
在使用完WPS后关闭其软件,在系统关机时右下角有窗口弹出,不能正常的关机,提示以下错误:
Plasma Workspace
Logout canceled by '/opt/kingsoft/wps-office/office6/wpsoffice`
解决该问题的方法是:打开任务管理器KSysGuard,发现wpsoffice进程依然存在,选择该进程,右键-- Send Signal -- Kill(KILL),关闭该进程,然后能够正常关机了。
相关主题
-
open office进程总退出问题解决方法
2021-10-15 07:21:36open office进程挂掉会出现连接异常,则可以在代码中增加对OpenOffice的ConnectException异常检测,如果捕获该异常,系统就连接open office服务器并执行restart脚本重启open office服务。代码如下: try { // ........linux服务器open office 进程总退出问题解决方法
在项目中使用open office做有生成证书(pdf)功能,但open office服务进程总是莫名其妙退出,解决方案如下。
方法一:程序捕获异常
open office进程挂掉会出现连接异常,则可以在代码中增加对OpenOffice的ConnectException异常检测,如果捕获该异常,系统就连接open office服务器并执行restart脚本重启open office服务。代码如下:
try { // ...... connection.connect(); // ...... } catch (ConnectException e) { logger.info("连接异常openoffic服务器......,ip={}", ip); Connection sshConn = new Connection(ip, 22); Session session = null; try { sshConn.connect(); boolean isAuthenticated = sshConn.authenticateWithPassword("root", "123456"); if (isAuthenticated) { session = sshConn.openSession(); logger.info("重启open office服务......"); session.execCommand("sh /root/restart.sh", "UTF-8"); InputStream sessionIn = new StreamGobbler(session.getStdout()); BufferedReader brs = new BufferedReader(new InputStreamReader(sessionIn)); String line = brs.readLine(); logger.info("重启open office服务,启动结果输出,{}", line); } else { logger.error("连接ssh失败,用户名或密码错误"); } } catch (Exception se) { logger.error("连接ssh失败,ip=" + ip, se); } finally { if (session != null) { session.close(); } sshConn.close(); } // 抛出异常,让当前的任务记录错误信息,下一个任务会正常进行 throw e; }
方法二:使用linux定时任务
使用linux的cron定时任务管理,每分钟都执行一下脚本检测open office进程是否存在,不存在则重启服务,脚本如下
#!/bin/sh OPENOFFICEPID=`ps -ef|grep "/opt/openoffice4/program/soffice"|grep -v grep|grep -v grep|awk '{print $2}'` if [ ! -n "$OPENOFFICEPID" ]; then echo "OPENOFFICEPID is empty, start openoffice" nohup soffice -headless -accept="socket,host=192.168.1.1,port=8100;urp;" -nofirststartwizard & else # kill all openoffice process # ps -ef|grep "/opt/openoffice4/program/soffice"|grep -v grep|grep -v grep|awk '{print $2}' | xargs kill echo "OPENOFFICEPID is $OPENOFFICEPID is started!" fi
备注:定时任务添加步骤如下:
crontab -e # 进入vim编辑,添加一行定时任务并保存 # 格式: 分 时 日 月 周 命令 参数 */1 * * * * /bin/sh /root/restart.sh # 查看任务列表 crontab -l
-
Qt学习笔记:清除用QAxObject创建的Office进程
2018-10-13 22:31:46环境 系统:Windows10 64位 家庭中文版 Qt版本:5.6.0 msvc2013 32位 ...我们需要及时地清理这些进程,注意:不能不加区分地清理Office的进程,因为Office进程有可能是Qt程序创建的也有可能是Of...环境
系统:Windows10 64位 家庭中文版
Qt版本:5.6.0 msvc2013 32位
编译器:Visual Studio 2013 专业版目的
在Qt中,当程序非正常关闭时,用QAxObject创建的Office进程不会随着程序的关闭而关闭,导致进程残留。我们需要及时地清理这些进程,注意:不能不加区分地清理Office的进程,因为Office进程有可能是Qt程序创建的也有可能是Office本身创建的。
步骤
1.获取残留的Office进程的Pid,关键代码:
//根据进程名获取pid QList<int> Widget::getListPidByName(const char *strName) { QList<int> lstPid; HANDLE hProcess; PROCESSENTRY32 processEntry; processEntry.dwSize = sizeof(PROCESSENTRY32); BOOL bRet; //进行进程快照 hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //TH32CS_SNAPPROCESS快照所有进程 //开始进程查找 bRet = Process32First(hProcess, &processEntry); //循环比较,得出ProcessID while(bRet) { QString temp = QString::fromWCharArray(processEntry.szExeFile); if(strcmp(strName, temp.toLocal8Bit()) == 0) { lstPid.append(processEntry.th32ProcessID); } bRet = Process32Next(hProcess, &processEntry); } return lstPid; }
2.根据进程的Pid获取父Pid,关键代码:
//根据进程的Pid获取父Pid DWORD Widget::getParentPidByPid(DWORD dwProcessId) { LONG status = -1; DWORD dwParentPid = (DWORD)-1; HANDLE hProcess = NULL; PROCESS_BASIC_INFORMATION processBasicInformation; PROCNTQSIP NtQueryInformationProcess = (PROCNTQSIP) GetProcAddress( GetModuleHandle(L"ntdll"), "NtQueryInformationProcess"); if (NULL == NtQueryInformationProcess) { return (DWORD)-1; } // Get process handle hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId); if (!hProcess) { return (DWORD)-1; } // Retrieve information status = NtQueryInformationProcess(hProcess, ProcessBasicInformation, (PVOID)&processBasicInformation, sizeof(PROCESS_BASIC_INFORMATION), NULL ); //注意:这里要用32位的编译器,64位的编译器得到的不是0而是 -1073741820 if (!status) { dwParentPid = processBasicInformation.InheritedFromUniqueProcessId; } CloseHandle(hProcess); return dwParentPid; }
3.根据父Pid来决定要不要杀死这个进程,关键代码:
//杀死进程 void Widget::killProcess(const QList<int> &lstSubPid, const QList<int> &lstParentPid) { int nParentPid = -1; //遍历子进程 for (int i = 0; i < lstSubPid.count(); ++i) { //获取子进程的父进程 nParentPid = getParentPidByPid(lstSubPid.at(i)); //如果这个进程是由某个父进程创建的,则杀死 if (lstParentPid.contains(nParentPid)) { HANDLE hProcess = NULL; //打开目标进程 hProcess = OpenProcess(PROCESS_TERMINATE,FALSE, lstSubPid.at(i)); if (hProcess == NULL) { qDebug()<<"Open Process fAiled ,error:"<<GetLastError(); } //结束目标进程 DWORD ret = TerminateProcess(hProcess,0); if(ret == 0) { qDebug()<<"kill task faild,error:"<<GetLastError(); } else { qDebug()<<"kill task success ------------------------------------------------"; } } } }
注意:这里这样做的原因是:用QAxObject创建的Office进程的父进程和用Office创建的Office进程的父进程不是同一个进程。
示例源码 -
office excel2010如何双开窗口或多窗口_亲测有效.zip
2021-01-10 18:40:38office excel2010如何双开窗口或多窗口_亲测有效.zip -
Microsoft.Office.Interop组件接口-2010版本
2019-02-22 16:04:10Microsoft.Office.Interop.Excel.dll for Excel2010 Microsoft.Office.Interop组件接口-2010版本 -
C#进程.docx
2019-09-24 10:05:05这是一个C#进程文档,适合初学C#,关于进程方面的知识点 -
C#结束Excel进程的步骤教学
2020-12-31 20:57:171、项目中,引用添加office COM组件 2、引用接口 3、在程序中 添加代码 [DllImport(“User32.dll”, CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); 4... -
C#使用Microsoft.Office.Interop进行EXCEL操作时彻底关闭EXCEL进程
2022-01-21 16:12:47当我们使用Excel操作时候,发现总是不能退出,可以这么办 IntPtr t = new IntPtr(xlsApplication.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics... -
Windows 进程完全解析
2018-01-05 00:04:14Windows 进程完全解析 system process 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描述: Windows页面内存管理进程,拥有0级优先。 是否为系统进程: 是 -
C#利用com操作excel释放进程的解决方法
2020-09-05 13:25:43最近利用Microsoft.Office.Interop.Excel.Application读取一个excel后,进程中一直存在excel,在网上找了一阵子,其中有几个解决方案 -
解决在IIS中调用Microsoft Office Excel组件后进程无法正常退出的问题
2021-07-06 13:37:50解决在IIS中调用Microsoft Office Excel组件后进程无法正常退出的问题 -
VB.NET 使用Microsoft.Office.Interop进行EXCEL操作时彻底关闭EXCEL进程
2020-01-14 14:51:05Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop Public Class 关闭EXCEL ' ' TODO: 在此处添加构造函数逻辑 ' Public Sub New() End Sub <DllImport("User32.dll", CharS... -
c# 启动关闭进程
2012-10-22 18:40:56c# 启动关闭进程 文档为网上收集,版权归原作者所有,O(∩_∩)O谢谢。 -
在Deepin 20系统下wpsoffice无响应进程的解决方法
2021-05-15 08:52:41如果你的Deepin 20(Linux)系统出现一个(无响应)wpsoffice进程,可用该方法来解决。问题安装国内版如果打开文档速度太快,一下点太多次,进程里面经常出现wpsoffice无响应:强制结束又会自动出现,这个很烦人。解决... -
javascript判断office版本示例
2020-12-12 02:12:55使用JavaScript判断office版本,在项目开发中非常有用,由其是在OA系统的在线office编辑,我们需要让office在线编辑工具同时支持office的多个版本,例如office2003、2007。office在安装的时候,会在注册表中写入键值... -
office2Pdf的源码及启动bat(一键启动,无需更改)
2018-09-15 12:38:36(注意:一定要阅读我的readme)用java实现了office转PDF的功能。并做成了bat启动文件,方便一键启动。等待转化的文件路径:D:\\pdfwordData,转化后的文件路径D:\\overData\\。当然你也可以根据自己的需要更改。 -
office-text-extractor:另一个库可从MS Office和PDF文件提取文本
2021-05-07 05:53:51根据mime类型而不是文件扩展名分析文件 不产生子进程以使用设备上安装的工具 如果是简单文本文件,则从文件读取并返回文本 使用的图书馆 该模块使用了一些令人惊叹的现有库,它们的性能比该模块中最初存在的库要好,... -
常见系统进程列表第1/2页
2020-09-16 00:50:28系统进程列表 -
Linux Shell脚本实现根据进程名杀死进程
2016-08-10 14:05:04怀念windows下的任务管理器啊,有啥看的顺眼的程序鼠标点几下就能将其干掉。 今天在用Firefox浏览器浏览网页时,界面瞬间卡住了,什么都不能点,测试了下,只有切换到命令行界面(Ctrl+Alt+F1)才有反应,切回... -
kkFileView代码分析(四)——office文件的转换(1)office插件管理
2021-11-20 16:48:58if (killOffice) { logger.warn("检测到有正在运行的office进程,已自动结束该进程"); } try { DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration(); configuration.... -
Office-TypeLib-Remediation:在32位和64位版本的Office之间对COM和.NET功能的修复
2021-03-27 01:38:30通常,当COM或.NET客户端作为32位进程运行时,会发生这些问题。 本项目解决了32位和64位版本的Office之间的这些COM和.NET问题的补救措施。修复资源此项目中有两个资源可用来帮助检测和修复孤立的Office TypeLib... -
linux环境如何启动office转换服务.docx
2020-10-28 14:34:56Linux环境下启动office转换服务的方法 注意不建议使用xshell去连接启动office转换服务该工具存在断开连接后...操作步骤 1先查询是否存在office转换服务的进程 命令ps ef|grep Office 下图中查询出是存在进程的pid是2 -
jacob操作office后关闭不掉进程
2016-01-26 13:04:45用jacoba操作office后,发现代码中的 app.invoke("Quit", new Variant[] {}); 不能正确关闭进程,解决方法是:将方法放在ComThread中最后关闭ComThread /** * 将Excel转换成PDF * @param excelPath * @param ... -
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2020-12-24 01:16:25复制代码 代码如下:#-*- coding:utf-8 -*-...name) app.Visible = True time.sleep(0.5) app.Quit() if __name__ == ‘__main__’: ””’ 通过python启动办公软件的应用进程, 其中wpp、et、wpp对应的是金山文件、表格 -
CVE-2017-11882:CVE-2017-11882(通杀Office 2003到2016)
2021-03-04 06:58:33此突破是由Office软件里面的[公式编辑器]造成的,由于编辑器进程没有对举个例子,如果黑客利用这个漏洞,构造带有外壳后门的office文件,当普通用户打开这个office文件,则电脑可以被黑客直接控制。 影响版本: ... -
手动删除Office 2013或Office 365即点即用安装的步骤
2021-07-28 07:46:00如果您无法使用Fix it或控制面板删除Offiice 2013或Office 365,也可以尝试手动从PC删除Microsoft Office。要确定Office 2013的安装版本,请执行以下步骤:1、启动Office 2013应用程序,例如Word 2013。2、在“文件... -
NZRR94.zip_进程与线程_C++_
2021-08-09 23:46:34用VC单文档界面调用WORD -
prggicient_robustness.rar_进程与线程_Others_
2021-08-11 11:35:28游船工程管理软件 用access编的 Cruise project management software