C# Excel 프로세스 닫기
4752 단어 Excel
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();
}
프로필 시스템을 수정해야 합니다.config
위 섹션은 Win2008에서 찾을 수 없습니다. 설정되지 않았습니다.
사용자 권한을 설정하여 Asp.net 아날로그 사용자 등은 엑셀 프로세스를 죽일 수 없습니다. 마지막 해결 방법은 엑셀 프로세스를 자동으로 죽이는 서비스를 쓰는 것입니다.
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()
{
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel Grep toolExcel Grep tool ■히나가타 ■ 시트 구성 ExcelGrep.cls...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.