想了解WorkbookOpen事件与Windows服务没有触发,而它与Windows应用程序触发的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于workbookopen事件不触发的相关问题,
想了解WorkbookOpen事件与Windows服务没有触发,而它与Windows应用程序触发的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于workbookopen事件 不触发的相关问题,此外,我们还将为您介绍关于2部分Windows应用程序:“Windows服务”+ GUI来configuration它、asp.net – Windows应用程序与Web应用程序开发、c – 为什么必须将SetWindowsHookEx与Windows消息队列一起使用、c# – Windows服务中未触发设备事件的新知识。
本文目录一览:- WorkbookOpen事件与Windows服务没有触发,而它与Windows应用程序触发(workbookopen事件 不触发)
- 2部分Windows应用程序:“Windows服务”+ GUI来configuration它
- asp.net – Windows应用程序与Web应用程序开发
- c – 为什么必须将SetWindowsHookEx与Windows消息队列一起使用
- c# – Windows服务中未触发设备事件
WorkbookOpen事件与Windows服务没有触发,而它与Windows应用程序触发(workbookopen事件 不触发)
当我使用Windows应用程序下面的代码时,它总是会激发WOrkBookOpen事件。
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()中创buildExcel互操作对象并附加相同的事件。 但是在安装服务之后,这个事件不会触发。 而在相同的Windows应用程序,它启动。 这里为了testing目的,我在我的磁盘上创buildFILE来检查事件是否正在触发。
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:SampleServiceErr.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,我是机器上的安装服务。 我正在给予适当的权利来服务创buildExcel.Application com组件的对象。
有没有人遇到过这样的问题? 或者你发现我错过了什么?
备份其他进程正在使用的文件
在.NET中模仿Windows的“运行”窗口
孤立的存储误解
如何从C#中的打印机中删除访问控制条目?
如何计算电脑下载的金额?
感谢帕雷什
为什么threadpool.QueueUserWorkItem创build这么多事件句柄?
我应该在哪里为我的应用程序生成临时文件?
如何在我的.NET应用程序中find用户的字体?
WMI,负cpu使用率值和过去的Timestamp_Sys100NS
检查CD-ROM托盘状态
您的服务在哪个帐户下运行? 如果是SYstem,请确保选中“ 允许服务与桌面交互 ”选项。 或者,尝试在正常用户帐户下运行您的服务。
首先,您似乎正在尝试使用服务和excel.application对象来记录打开的excel文件。 这不是一个很好的解决方案,你会发现它最多只会给出不一致的结果。
Excel.Application对象将在您的应用程序的服务帐户下创建。 根据您的服务设置,此服务可能会或可能无法与桌面进行交互。 但是,用户将始终能够在其用户帐户中打开Excel应用程序。
其次,如果您从系统帐户运行Excel对象服务,您将面临巨大的安全问题。 办公文档是各种恶意软件的巨大来源,您可以在任何恶意软件下打开任何东西,甚至连管理员都无法访问您的系统。 您不应该在没有考虑安全后果的情况下在特权帐户下打开文档。
第三,excel中的很多事件都是针对gui的,如果它们不是一个可见的窗口,它们可能不会被触发。 在2000年以前,我在2000年以前就学到了这一点,从那以后,我真正地限制了我对它们的依赖。
如果我可以提出一些建议,
如果您的目的是监视谁打开文件,请考虑使用内置于Windows中的文件系统安全性/日志记录。 可以将其设置为审核文件并在文件被访问时写入安全事件日志。 使用WMI可以轻松地在网络上检索这些信息。
除非您确定要执行什么操作,否则不要在特权帐户下运行任何操作。 你的excel文件现在可能还好,但是一个用户引入宏病毒可能是灾难性的。
如果您必须编写自己的“日志记录”,请考虑使用全局钩子来监视(仅监视,而不是更改或修改)文件打开的Excel。 只有在打开excel文件时才记录的quickie hook应用程序不会影响系统性能,并且比您所建议的更安全和更稳定。 如果你不熟悉钩子,desaware用来制作钩子和子类化的一些很棒的组件,你应该检查它们。 除非你对程序的操作非常熟悉,否则只能监视这些消息,不要试图将它们“处理”为excel。
一个Excel插件只是一个文件,增加了自定义函数或功能,它是最常见的VBA在xll或xla文件。 如果您需要安全性,不要依靠插件来监视文件访问,因为它们可以很容易地被禁用。
监视谁打开文件的最有效的方法是使用内置于NTFS的文件审计。
2部分Windows应用程序:“Windows服务”+ GUI来configuration它
我正在研究一个由两部分组成的Windows应用程序:
一个代理,在后台运行。
带窗口的主要应用程序,用于启动/停止代理程序并对其进行configuration。
我所理解的是我应该为代理使用“windows服务”。
但我不知道这应该如何打包? (我可以在同一个.exe中有这两个部分?)
以及代理和主应用程序如何进行通信(我应该使用共享文件吗?我的代理是否可以使用私人文件夹?)
我基本上在寻找一些架构build议
在Windows上使用RMarkdown执行bash(Git-Bash)
试图在Python中创build一个打印计算器程序,程序输出0无限
Bower安装包EPERM重命名错误
在Windows上安装dm-types。 (Win7 x64)
确定文件夹ACL是否从.NET中的特定date开始被修改
IOError:权限被拒绝
获取另一个程序的值
如何在Windows Phone 8.1中清除caching导航caching模式
如何开发Windows 2008 64位的C#控制台应用程序?
`os.rmdir`不能在空目录下工作?
您将需要分开.exe文件,一个为服务和一个为Windows应用程序。 你可以在Visual Studio中打包这两个独立的MSI,这样做的好处是,如果你需要移动服务(无论出于什么原因),那么你也不会打包Windows应用程序并将其留在你安装服务的地方。
有不同的方式可以让他们沟通而不会大量复杂。 您可以从文本文件中读取,正如您所建议的那样,但这可能会导致锁定问题。 当我不得不做类似的事情时,我在sql创建了一个简单的数据库(或者你希望的任何品牌的数据库),然后让Windows应用程序向表中插入/更新配置选项,然后服务读取表来获取它的设置。
将代理作为服务运行可能是最好的选择。 它将在没有任何人需要登录的情况下运行,并且Windows为服务提供广泛的监视支持。 您可以使用sc命令来安装,启动和停止服务,如果您拥有适当的权限,它甚至可以支持在其他计算机上控制服务。
为了让你的GUI与它沟通,你可以看看使用WCF。 它将允许您定义与C#类的服务交互,并且可以节省您不必担心检查共享目录或查看共享文件等问题。这种方法还可以轻松地同时支持多个客户端,像共享文件夹的方法会使这个困难。
asp.net – Windows应用程序与Web应用程序开发
Windows应用程序开发遵循不同的方法,测试方法等?当我想到安装Windows应用程序以及安装应用程序的用户,还要考虑软件如何更新时,似乎这种类型的开发涉及的过程更加结构化,并且具有更少的错误空间”.
你认为没有WPF经验的人或Windows应用程序体验,但具有.net背景,有足够的知识来自信地设计和开发一个WPF应用程序(作为一个团队领导),或者如果一个这样的项目随之而来的是那些有经验的WPF应用程序盗版者呢?
解决方法
整个请求/响应通常是IMO,而且有时是不可靠的,更不用说越来越多的浏览器支持,不同的开发标准和页面生命周期的学习曲线哦,当然,广告的趋势越来越大,的地方
然而,哪些网络应用程序带给我们的是WinForms希望达到的目标,所以虽然有一个学习曲线,而且开发时间的增加有明显的收获.
我们(和我想象的大部分机构)倾向于使用Windows应用程序进行管理,其中丰富的用户界面在最短的时间内是可取的,毕竟,为什么要浪费Web服务器资源,当可能有99%的可用cpu在每个用户PC上?
c – 为什么必须将SetWindowsHookEx与Windows消息队列一起使用
hook = SetwindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,NULL,0);MSG msg;while(GetMessage(&msg,0) > 0){ TranslateMessage(&msg); dispatchMessage(&msg);}UnhookWindowsHookEx(hook);
为什么这样的东西不行?
hook = SetwindowsHookEx(WH_KEYBOARD,0);cin >> aKey;UnhookWindowsHookEx(hook);
使用升压螺纹,屏障也不起作用.为什么钩子和钩钩之间的等待不能以另一种方式完成?
编辑:
当我创建这个示例时,我做了一个错误,我创建一个WH_KEYBOARD_LL钩子,而不是WH_KEYBOARD,(我不认为它有很大的区别)
此外循环也不会执行只等待GetMessage函数.
循环执行只当我发布退出消息PostThreadMessage(id,WM_QUIT,2323,NULL);所以我不明白在旁边做什么,还有一些内部处理?
有关:
C++ SetWindowsHookEx WH_KEYBOARD_LL Correct Setup
How can I set up a CBT hook on a Win32 console window?
解决方法
像WH_KEYBOARD这样的全局钩子是非常不同的.它需要一个DLL,并且在处理键盘消息的进程中发生回调.你需要一些进程间的沟通来让自己的程序知道这一点.命名管道是通常的选择.否则当然要求这个注入的过程泵送消息循环.否则不会收到键盘消息.
喜欢一个低级别的钩子,他们更容易去.但是做泵还是不行.请注意超时,如果您的响应不足,Windows将无法通知您.
Understanding the low-level mouse and keyboard hook (win32)
c# – Windows服务中未触发设备事件
与Windows窗体应用程序相比,为Windows服务注册和创建事件处理程序有什么区别吗?
请帮我.
AxLxInterface.socketinitialize(); AxLxInterface.WorkIndex = 0; AxLxInterface.CardEvent += AxLxInterface_CardEvent; //event registration(but won't fire AxLxInterface.socketConnect(serverIp,serverPort); //will connect successfully AxLxInterface.DateTimeRead(); //will give the machine date time AxLxInterface.PollingStart(000,000);
事件处理程序
public void AxLxInterface_CardEvent(object sender,_dlxInterfaceEvents_CardEventEvent e) { }
解决方法
但是,这不是Windows服务的默认执行环境.因此,您需要自己创建并运行STA线程.这个问题/答案可能会进一步帮助您:
StaTaskScheduler and STA thread message pumping
关于WorkbookOpen事件与Windows服务没有触发,而它与Windows应用程序触发和workbookopen事件 不触发的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于2部分Windows应用程序:“Windows服务”+ GUI来configuration它、asp.net – Windows应用程序与Web应用程序开发、c – 为什么必须将SetWindowsHookEx与Windows消息队列一起使用、c# – Windows服务中未触发设备事件等相关内容,可以在本站寻找。
本文标签: