我有一个由进程加载和文件锁定的dll,我想用更新的版本更新它。我正在寻找一种替代方法来终止进程以在更新dll之前释放文件锁。现有的事件进程仍然使用旧版本是可以的,只要新实例化的进程采用新逻辑即可。似乎我可以简单地重命名/移动dll,并且实时进程似乎仍然运行良好。这样做安全吗?如果dll的代码已经加载到进程中,为什么还需要锁定dll? 最佳答案 移动任何随机应用程序使用的所有dll并不总是可以的。某些应用程序,如asp.net,使用影子副本概念,它们实际复制dll并使用副本让您可以自由修改原始文件。在asp.net的情况下,如果您修改
我正在尝试枚举所有正在运行的进程EXE名称,但在XPGuest帐户上尝试此操作时遇到了麻烦。我能够使用EnumProcesses枚举所有进程ID,但是当我尝试使用PROCESS_QUERY_INFORMATION或PROCESS_VM_READ进行OpenProcess时,函数失败。我在XPGuest帐户下启动了ProcessExplorer,它能够枚举所有进程名称(尽管正如预期的那样,来自Guest用户空间之外的进程的大多数其他信息不存在)。所以,我的问题是,我如何复制ProcessExplorer魔法来获取在Guest帐户用户空间之外运行的服务和其他进程的进程名称?
我有一个可以正常运行或作为服务运行的可执行文件。在启动时,如果有错误(使用MessageBoxapi),它可能会显示错误消息。如果应用程序作为服务运行但不允许与桌面交互,这可能会导致失败。该进程可能看起来挂起。是否有一种编程方式来检测应用程序是否可以与桌面交互?然后我可以使用其他一些错误通知机制(日志文件等) 最佳答案 您可以在调用MessageBox()时指定MB_SERVICE_NOTIFICATION,这将在当前事件的session中显示消息。但是,在服务中显示消息框并不是您真正想要的。服务应该在后台运行,而不是直接与用户交互
我正在用C编写一个简单的程序,它使用exec函数打开Internet浏览器。但是,在我关闭互联网浏览器之前,该程序不会终止。编写此程序以打开Internet浏览器然后结束的最佳方法是什么? 最佳答案 当您使用exec时,您的整个进程将被替换为新进程的镜像,而当前进程将不复存在。相反,预先fork一个新进程(如果需要setsid将其从父进程中分离)和然后exec新的进程镜像。fork的进程将被新的进程镜像替换,父进程将保持事件状态。如果您想让父进程保持打开状态直到子进程退出,请查看waitpid。编辑:为了将来的引用,是的,setsi
我正在用C编写一个组件,它将被几个不同的进程使用,它们都访问同一个文件。每个进程将同时访问文件的不同部分,主要用于读取,也用于写入。我想弄清楚正确的方法是:选项A:对于每个进程,为整个文件调用一次CreateFileMapping,然后在不同部分多次使用MapViewOfFile来访问它需要的部分,这意味着如果我有10个部分我想访问,我将为整个文件调用一次CreateFileMapping,端到端,然后MapViewOfFile10次,文件的每个部分一次。或选项B:对于每个要访问的每个特定部分调用CreateFileMapping和MapViewOfFile的进程,这意味着如果我有10
在WindowsXP中是否可以编写脚本来查看哪些进程/程序正在通过Internet发送/接收数据?我有完全的管理员权限,我想找到一种方法来监控我机器上的数据交换,而无需安装任何额外的软件。 最佳答案 第一步:WindowsXP同时按Windows键和R打开“运行”框。输入CMD,然后按OK。命令提示符窗口将打开:第二步在打开的命令提示符窗口中,输入以下内容:netstat-b5>activity.txt然后按回车键。(注意:要将某些内容粘贴到命令提示符中,您需要右键单击并单击粘贴。)如果您忘记以管理员身份运行提示(就像我在上面的屏幕
在Windows(最好是XP)上,当进程在特定地址(在它的虚拟地址空间中)写入时,通常可以挂起进程吗?加载的DLL执行写操作而不是进程本身的(PE)镜像中的代码这一事实使问题变得复杂。 最佳答案 您可以使用VirtualProtect和PAGE_GUARD或其他选项保护包含感兴趣地址的页面,并在地址写入时出现异常。此类异常可以由未处理的异常过滤器处理(视情况而定,应用程序可能会自行处理),或由进程外调试器应用程序处理,例如众所周知的调试器或通过API自定义应用程序调试进程。调试器应用程序可以在必要时暂停进程,或者使用快照进行小型转储
我想将击键发送到多个进程。例如,如果我按“1”,那么我想将“1”发送到3个“记事本窗口”。首先,我想尝试向记事本发送击键,但在HWND上失败了://HANDLEhWin;HWNDwindowHandle=FindWindowA(NULL,"Notepad");//Can’tfindaproccess//Sendakeyif(windowHandle)//Thisonefails{while(true){if(GetAsyncKeyState(VK_F12)!=0){SendMessageA(windowHandle,WM_KEYDOWN,VK_NUMPAD1,0);Sleep(1000
据我所知-Windows中的任何进程都会获得2GB的虚拟内存地址空间(在某些情况下为3GB)用于分配用途。在什么情况下进程将获得3GB而不是2GB?应用程序开发人员是否可以通过某种方式“要求”操作系统分配超过2/3GB的虚拟地址空间?如果进程需要超过3/2GB会怎样?(我猜系统会遇到一些“内存不足异常”——但有什么方法可以避免这种情况吗?)例如-如果进程是“MicrosoftSQLServer”,需要分配比2/3GB多得多的内存,会发生什么 最佳答案 一个32位进程有4GB地址空间,其中通常为硬件保留1GB,为Windows保留1G
假设我有2个pdf文档,我已经用acrobatfinereader打开了它们。所以我有2个不同的窗口。但是当我使用这段代码时:foreach(ProcesspinProcess.GetProcesses(".")){try{Console.WriteLine("\r\n");Console.WriteLine("\r\nWindowTitle:"+p.MainWindowTitle.ToString());Console.WriteLine("\r\nProcessName:"+p.ProcessName.ToString());Console.WriteLine("\r\nWindo