当Windows中的服务或应用程序启动、停止以及它是成功退出还是出现错误代码时,我需要跟踪日志。据我了解,许多服务不会记录自己的开始和停止时间,或者如果它们正确退出,所以似乎要走的路必须在API中插入一个钩子(Hook),以便在服务/应用程序请求时捕获处理空间并放弃它。我的问题是我需要hook什么函数才能完成这个,这有可能吗?我需要它在64位WindowsXP和7上工作。 最佳答案 我认为最好的办法是使用设备驱动程序。参见PsSetCreateProcessNotifyRoutine.
我有一个用WiX编写的简单msi,它安装了nativeNT服务。在我对msi进行一些更改后,它在StartServices标准操作中失败,并显示错误“服务无法启动,请验证您是否具有足够的权限”。如果我按忽略并手动启动该服务,则它会成功启动。问题绝对不是权限不足。我如何诊断/调试此类问题?WindowsInstaller的详细日志似乎不包含任何有用的信息。 最佳答案 安装程序不会有任何有用的信息,因为错误仅由安装程序显示。以下是我的处理方法。注释掉ServiceControl元素,这样安装程序就不会尝试启动该服务。运行安装程序并完成所
我希望通过TortoiseSVNHook脚本在START提交或PRE提交中运行批处理文件。我所做的测试均无效。我已经创建了一个批处理文件(svnadd.bat),它现在只是将消息写入文本文件,所以我知道它被触发了。但是,批处理文件似乎没有运行,因为没有写入消息。echoYES>C:\Temp\commit.txt这是我的Hook设置。我的过程。右键单击受svn版本控制的文件夹,然后选择SVN提交。提交对话框显示,但是批处理文件没有执行。svn控制下的所有svn软件、存储库和文件夹/文件结构都驻留在同一台计算机/驱动器上。根据屏幕截图,我还尝试将cmd.exe添加到命令行的前面作为C:\
我正在尝试使用全局shellHook来监听窗口创建和销毁的事件,但似乎我的程序只是为本地线程注册销毁的事件。根本没有创作事件,而且绝对不是我认为应该是的全局事件。我花了最后一天时间搜索google以及codeguru、codeproject和msdn,但在我看来我做对了,尽管我显然不是。谁能帮我指出正确的方向?#pragmadata_seg(".SHARE")HWNDhWndServer=NULL;HHOOKg_shell_hook=NULL;#pragmadata_seg()#pragmacomment(linker,"/section:.SHARE,RWS")TASKBAR_API
我知道如果用户设置了像中文这样的键盘布局,很难将WH_KEYBOARD_LL消息转换成相应的unicode字符,但我仍然想完成我的多语言应用程序。正如我在originalquestion中提到的为什么我使用WH_KEYBOARD_LLHook并不重要,我尝试了其他东西,这是最适合我的应用程序的东西。问:我可以将我的hookproc中的WH_KEYBOARD_LL消息床发送到另一个原本指定的窗口吗?这样做的好处是(如originalquestion的回答3中所述)如果我将此消息发送到包含编辑框的窗口,也许这会将其转换为写入unicode字符,我可以从那里获取它。
我有一个应用程序,我没有播放音频的源代码,但缺乏加速或暂时静音音频播放的工具。我正在尝试通过注入(inject)一个dll并HookwaveOutOpen、waveOutWrite(并分别阻止播放或尝试waveOutSetPlaybackRate以实现静音和加速)来添加这两个功能。但是我有几个问题。让我们先谈谈“静音”按钮,因为这是我的第一项业务:我将函数的Hook版本称为MyWaveOut...1)我可以毫无问题地挂接这些函数,并且我看到它们在dbgView日志语句中被调用。我的第一次尝试是只拦截waveOutWrite函数调用,如果我的“静音”按钮被按下,则只在MyWaveOutW
我的问题是关于Windows7的驱动程序开发。我需要拦截对驱动程序的系统调用。理论上,在这种情况下,建议创建一个过滤器驱动程序,但在我的例子中,该驱动程序不公开与过滤器兼容的接口(interface)。准确地说,它是一个Vista/7显示微型端口驱动程序。显示驱动程序作为标准WDM驱动程序加载。在它的DriverEntry中,它应该调用一个DxgkInitialize系统例程(我猜是由win32k.sys导出的)。我的目标是拦截此调用。任何人都可以建议我任何有用的资源,我可以找到有关如何实现此目标的信息吗?胜利的关键可能是将驱动程序可执行导入部分中的DxgkInitialize替换为我
我正在编写一个需要获取系统输入语言的应用程序,而应用程序窗口未聚焦。在谷歌搜索后,我发现这样做的方法是HookWM_INPUTLANGCHANGE消息。但是我找不到钩子(Hook)的语法示例。我找到了以下代码并尝试根据我的需要对其进行调整,但我失败了:编辑:我已将WM_KEYUP替换为WM_INPUTLANGCHANGE,但它不起作用。usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Runtime.InteropServices;usingSystem.Windows.For
如何捕获Windows安装程序的默认错误消息?它看起来像静音模式,没有显示任何消息。例如,当另一个msi正在进行时,安装程序将显示错误代码为1500的错误消息:“另一个安装正在进行中。您必须完成该安装才能继续安装。”,我不想在这种情况下显示它,只是退出安装程序。请帮助我! 最佳答案 “另一个安装正在进行中”错误由WindowsInstaller自动显示。这是一个内部错误,它不受您的包管理。所以你无法控制它。大多数安装错误也是如此。您无法以自定义方式捕获或处理它们。您能做的最好的事情就是尽量避免它们,例如在安装过程中不要启动另一个
我正在使用NSIS构建程序安装程序。可执行文件名为XYZ.exe,我想将其安装在“$PROGRAM_FILES/XYZ1.0/”中。我还在菜单开始中创建快捷方式:“$MENU_START/XYZ1.0/XYZ1.0”指向“$PROGRAM_FILES/XYZ1.0/XYZ.exe”使用创建的安装程序安装我的软件后,会显示“新安装的软件”提示。使用链接不会使此提示消失。这是一个简短说明Windows如何处理新安装的程序的链接。不幸的是,这些信息并不准确。http://blogs.msdn.com/b/oldnewthing/archive/2005/11/24/496690.aspx我该