当我在Windows应用程序中使用下面的代码时,它总是触发WOrkBookOpen事件。WorkbookOpen事件不会与Windows服务一起触发,而它会在Windows应用程序中触发
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Microsoft.Office.Interop.Excel.Application app;
private void button1_Click(object sender, EventArgs e)
{
app = new Microsoft.Office.Interop.Excel.Application();
app.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(app_WorkbookOpen);
app.WorkbookActivate += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookActivateEventHandler(app_WorkbookActivate);
}
void app_WorkbookActivate(Microsoft.Office.Interop.Excel.Workbook Wb)
{
MessageBox.Show(Wb.FullName);
}
void app_WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook Wb)
{
MessageBox.Show(Wb.FullName);
}
private void button2_Click(object sender, EventArgs e)
{
app.Quit();
Marshal.FinalReleaseComObject(app);
}
}
但是,当我想要使用Windows服务启动相同的事件它不会触发。以下是用于服务的代码。我在服务的OnStart()中创建Excel互操作对象并附加相同的事件。但是在安装服务之后,这个事件不会触发。而在相同的Windows应用程序中它启动。这里为了测试目的,我在我的磁盘上创建了FILE以检查事件是否正在触发。
public partial class Service1 : ServiceBase
{
Microsoft.Office.Interop.Excel.Application excel;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
File.Create("C:\\SampleService\\Start - " + DateTime.Now.Ticks.ToString());
excel = new Microsoft.Office.Interop.Excel.Application();
excel.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(excel_WorkbookOpen);
excel.WorkbookActivate += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookActivateEventHandler(excel_WorkbookActivate);
File.Create("C:\\SampleService\\Start - " + DateTime.Now.Ticks.ToString());
}
catch (Exception e)
{
using (StreamWriter stream = new StreamWriter(@"C:\SampleService\Err.txt", true))
{
stream.Write(e.Message);
}
}
}
void excel_WorkbookActivate(Microsoft.Office.Interop.Excel.Workbook Wb)
{
File.Create("C:\\SampleService\\EXCEL - " + DateTime.Now.Ticks.ToString());
}
public void excel_WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook Wb)
{
File.Create("C:\\SampleService\\EXCEL - " + DateTime.Now.Ticks.ToString());
}
protected override void OnStop()
{
if (excel != null)
{
excel.Quit();
Marshal.FinalReleaseComObject(excel);
}
}
}
我也使用serviceInstaller,我是机器上的安装服务。我正在给服务的适当权限来创建Excel.Application com组件的对象。
有没有人遇到过这样的问题?或者你发现我错过了什么?
感谢 帕雷什
我已阅读由divo发表的评论。如果我可以建议,你可以创建一个Excel插件来做同样的事情?这是否是一个更好的选择? – shahkalpesh 2009-10-04 06:01:54