C# Excel进程关闭

C#user32.dll内嵌方法使用详解 Console.WriteLine("子窗口句柄: " + childWindowHandle);Console.WriteLine("窗口标题文本长度: " + titleLength);Console.WriteLine("窗口句柄: " + windowHandle);Console.WriteLine("未找到窗口句柄");// 调用 EnumChildWindows 函数来获取指定窗口的所有子窗口句柄。// 调用 EnumChildWindows 函数来枚举指定父窗口的所有子窗口。 阅读详情

http://www.cnthub.com/page/M0/S229/229175.html

 

using   System.Runtime.InteropServices;     


[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
protected void Button1_Click(object sender, EventArgs e)
{
Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Workbooks.Open("d:/aaa.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
IntPtr t = new IntPtr(excel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}

 

同时需要修改配置文件machine.config

 

<processModel   enable="true"   timeout="Infinite"   idleTimeout="Infinite"   shutdownTimeout="0:00:05"   requestLimit="Infinite"   requestQueueLimit="5000"   restartQueueLimit="10"   memoryLimit="60"   webGarden="false"   cpuMask="0xffffffff"   userName="System"   password="AutoGenerate"   logLevel="Errors"   clientConnectedCheck="0:00:05"   comAuthenticationLevel="Connect"   comImpersonationLevel="Impersonate"   responseRestartDeadlockInterval="00:09:00"   responseDeadlockInterval="00:03:00"   maxWorkerThreads="25"   maxIoThreads="25"/>   
  userName="machine"   改为   userName="System"

 

以上部分在Win2008中找不到 没有设置成功

 

通过设置用户权限,Asp.net模拟用户等方式任然无法杀掉Excel进程,最后的解决办法是写一个自动杀Excel进程的服务。

 

 

 

 

 

using System;

using System.Diagnostics;
using System.ServiceProcess;

namespace KillExcel
{
public partial class KillExcel : ServiceBase
{
public KillExcel()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
double sleeptime = 60 * 1000; //1分钟
System.Timers.Timer t = new System.Timers.Timer(sleeptime);//实例化Timer类,设置间隔时间为10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(killExcel);//到达时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;

}
public void killExcel(object source, System.Timers.ElapsedEventArgs e)
{
Process[] myProcesses;
DateTime startTime;
myProcesses = Process.GetProcessesByName("Excel");
//得不到Excel进程ID,暂时只能判断进程启动时间
foreach (Process myProcess in myProcesses)
{
startTime = myProcess.StartTime;

if ((DateTime.Now-startTime).Minutes>1)
{
myProcess.Kill();
}
}
}

protected override void OnStop()
{
}
}
}

 

 上边的服务出现不稳定问题,运行一段时间以后就会,自动杀死Excel进程,不再计算Excel启动时间与当前时间是否符合设定的时间差,还没找到原因。

 

计时器不能稳定运行,最后使用了线程方式来定时,这次可以稳定的运行了

 

 

 

public partial class KillExcel : ServiceBase

{
private int _timeOut;
private Thread _t;
public KillExcel()
{
InitializeComponent();
int to;
int.TryParse(ConfigurationManager.AppSettings["TimeOut"], out to);
_timeOut = to > 0 ? to : 3;
}

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
_t = new Thread(new ThreadStart(Monitor));
_t.IsBackground = true;
_t.Start();
}

private void Monitor()
{
int sleeptime = 60 * 1000 * _timeOut;
while (true)
{
Thread.Sleep(sleeptime);
killExcel();
}
}

public void killExcel()
{
Process[] myProcesses = Process.GetProcessesByName("Excel");
//得不到Excel进程ID,暂时只能判断进程启动时间
foreach (Process myProcess in myProcesses)
{
if ((DateTime.Now - myProcess.StartTime).Minutes > _timeOut)
{
myProcess.Kill();
}
}
GC.Collect();
}

protected override void OnStop()
{

}
}

 

 

 

unity游戏开发日志(一)将mmd模型导入unity,并解决材质丢失的问题 unity音乐游戏开发,导入角色模型并解决材质问题 阅读详情

相关推荐

autoware 激光-相机联合标定

autoware进行激光-相机联合标定 ~~~ 刚开始进行激光-相机联合标定的时候,出现了不少问题,在此记录一下整体标定流程,以防忘记。在此,特别感谢佳明师弟,在录制数据集时提供的帮助。 ~~~ 0.系统配置: Ubuntu18.04系统 ROS Melodic opencv 3.2.0 vlp-16 一.安装autoware 这部分网上教程挺多的,但我在编译的过程中仍存在不少bug,唉~_~。 二.安装calibration_camera_lidar,从a...

nuo112的博客 1万+

vb.net 全局键盘钩子

应网友邀请写的代码。 模块部分的代码: Imports System.Runtime.InteropServices Module Keyboard <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> Public Function SetWindowsHookEx(ByVal idHook As Integer, ByVal Hoo

学习微软 .net 技术开发 1092

无标题窗体的拖动程序[DllImport("user32.dll")]

无标题窗体的拖动程序[DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd,int wMsg,int wParam,int lParam); public const int WM_SYSCOMMAND=0x0112; public const int SC_MOVE=0xF010; private Button button1; public const int HTCAPTION=0x0002;(C#源代码编写)

C#调用Win32 的API函数--User32.dll

[code="C#"]using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace WindowsAPI { class CSharp_Win32Api { ...

hrd888888的博客 1356

C#】DllImport的使用

C#】DllImport的使用

wangnaisheng的专栏 4129

C#引入WINAPI传递中文字符串参数字符集问题

WinAPI函数的字符串参数所用字符集在不同版本的Windows系统并不统一,XP以前的系统通常是Ansi字符集,Windows7和NT系统是Unicode字符集。通常使用CharSet.Auto参数,让系统自动选择总是没错的(但不知道默认参数为什么不是CharSet.Auto),除非你指定调用AbcW宽字符集或AbcA窄字符集的函数版本。如果你没有指定CharSet,系统默认使用CharSet.Ansi,如果传递中文字符串,大概率是会调用失败,或者出现乱码的。...

qq_31042143的博客 872

C#彻底关闭Excel进程excel.exe

下面是完整的调用Excel关闭Excel,结束Excel进程的代码. [原创] 环境:VS2008 + Excel 2011.11.26 再次修订 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Dra

Wayne 1万+

C#导出Excel关闭进程EXCEL.EXE

C#中使用Microsoft.Office.Interop.Execl 导出excel 表格时,将以下两个属性亩后,在导完后, Excel.exe 进程无法关闭。 // excel app 是否可见app.Visible = false;  // app 为Microsoft.Office.Interop.Excel.Application 的实例对象 app.DisplayAlerts = ...

tmjianjun的博客 1799

C#关闭excel进程方法

 C#关闭excel进程方法 一直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程 时不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的 是如何kill当前这个进程,这

1051

C#关闭excel进程的最有效方法

 C#关闭excel进程方法 一直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程时不好解决多人并发的使用,比如一个人在导表然后kill所有的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的是如何kill当前这个进程,这里我们先

我的专栏 1067

c#强制关闭当前Excel进程

c#强制关闭当前Excel进程

qq_43510923的博客 885

c# 关闭excel进程

excel的application app,直接使用app.Quit();app=null;有时候不能完全关闭excel进程,而通过下面的Kill方法即Kill(app);则可以让正在处理的excel进程中消失。 引用命名空间using System.Runtime.InteropServices;         [DllImport("User32.dll", CharSet = Cha

lcawen的专栏 1732

C#操作完EXCEL如何砌底关闭进程

   有用C#编程操作EXCEL 的朋友可能都遇到过在操作完EXCEL之后,无法关闭EXECL进程的情况。这样即浪费了内存资源,又会造成软件的不稳定性。一般我位都是以下面方式关闭的,但很多时候都没成功/System.Runtime.InteropServices.Marshal.ReleaseComObject(Range); System.Runtime.InteropServices.

moshuchao的专栏 2369

[DllImport("user32.dll")]

这叫引入user32.dll这个动态连接库。 这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入。举个例子: [DllImport("user32.dll")] private static extern void 函数名(参数,[参数]); 函数名就是一个属于user32.dll里的一个函数。完了你就可以用那个函数了。 使用前要引用u...

xinying 4219

DllImport进阶:参数配置与高级主题探究

在基础篇中,我们已经简单介绍了DllImport的一些属性。现在我们将深入探讨这些属性的实际应用。

LongtengGensSupreme博客 2248

c# 获取当前活动窗口句柄

C# 窗口句柄操作

qq_35867189的博客 7559

C#中DllImport用法和路径问题

转载:https://blog.csdn.net/zhoucaifu/article/details/5416892 DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。 DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。 DllImport的定义如下: [Attribu...

qq_38040825的博客 917

Linux下C实现的聊天室.rar

实现目标一个在Linux下可以使用的聊天软件,要求至少实现如下功能:1. 采用Client/Server架构2. Client A 登陆聊天服务器前,需要注册自己的ID和密码3. 注册成功后,Client A 就可以通过自己的ID和密码登陆聊天服务器4. 多个Client X 可以同时登陆聊天服务器之后,与其他用户进行通讯聊天5. Client A成功登陆后可以查看当前聊天室内其他在线用户Client x6. Client A可以选择发消息给某个特定的Client X,即”悄悄话”功能7. Client A 可以选择发消息全部的在线用户,即”群发消息”功能8. Client A 在退出时需要保存聊天记录9. Server端维护一个所有登陆用户的聊天会的记录文件,以便备查可以选择实现的附加功能:1. Server可以内建一个特殊权限的账号admin,用于管理聊天室2. Admin可以将某个Client X “提出聊天室”3. Admin可以将某个Client X ”设为只能旁听,不能发言”4. Client 端发言增加表情符号,可以设置某些自定义的特殊组合来表达感情.如输入:),则会自动发送”XXX向大家做了个笑脸”5. Client段增加某些常用话语,可以对其中某些部分进行”姓名替换”,例如,输入/ClientA/welcome,则会自动发送”ClientA 大侠,欢迎你来到咱们的聊天室”附加功能:文件传输

上一篇: 使用 Visual Studio .NET 客户端执行自动化功能后不退出 Office 应用程序
下一篇: DllImport("User32.dll", CharSet = CharSet.Auto)]
gz775
博客等级 码龄18年 22粉丝 65原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值