Tag: 进程

Process.MainModule – >“访问被拒绝”

我想以不同的方式处理这个问题,即。 确定我是否有权访问。 是否可以查看您是否可以访问主模块? foreach (Process p in Process.GetProcesses()) { try { //This throws error for some processes. if (p.MainModule.FileName.ToLower().EndsWith(ExeName, StringComparison.CurrentCultureIgnoreCase)) { //Do some stuff } } catch (Exception) { //Acess denied } }

获取进程的所有窗口句柄

使用Microsoft Spy ++,我可以看到以下属于某个进程的窗口: 处理XYZ窗口句柄,以树forms显示,就像Spy ++一样,它给了我: A B C D E F G H I J K 我可以得到进程,MainWindowHandle属性指向窗口F的句柄。如果我使用枚举子窗口我可以得到G到K的窗口句柄列表,但我无法弄清楚如何找到窗口A到D的句柄。如何枚举不是Process对象的MainWindowHandle指定的句柄的子窗口? 要枚举我正在使用win32调用: [System.Runtime.InteropServices.DllImport(strUSER32DLL)] public static extern int EnumChildWindows(IntPtr hWnd, WindowCallBack pEnumWindowCallback, int iLParam);

从代码中确定我的进程正在运行的用户

除了好奇心之外,我真的没有理由提出这个问题 – 使用C#,有没有办法从代码中确定我的进程运行的用户是什么? 为了说明使用代码: static void Main(string[] args) { string userID; //what goes here to fill in this userID variable? Console.out.WriteLine(string.Format(“This process is running as {0}.”, userID)); }

使用控制台应用程序在C#中使用GenerateConsoleCtrlEvent

我正在努力让这个工作变得更加困难,希望你们其中一个人之前做过这件事。 我有一个C#控制台应用程序正在运行一个inheritance其控制台的子进程。 我希望外部应用程序捕获的ctrl-c被传递到内部应用程序,以便它有机会很好地关闭。 我有一些非常简单的代码。 我启动一个进程,然后使用WaitForExit(10)进行轮询。 我还注册了一个CancelKeyPress处理程序,它在触发时将bool设置为true。 轮询循环也检查这个,当它为真时,它调用GenerateConsoleCtrlEvent()(我通过pinvoke映射)。 我已经尝试了很多params组合到GenerateConsoleCtrlEvent()。 第一个参数为0或1,第二个参数为0或子进程的ID。 似乎没什么用。 有时我得到一个假回来,Marshal.GetLastWin32Error()返回0,有时我得到回来。 但没有一个导致子应用程序接收ctrl-c。 为了绝对肯定,我编写了一个测试C#应用程序作为子应用程序,打印出它正在发生的事情,并validation在运行时手动输入ctrl-c正确导致它退出。 几个小时以来,我一直在反对这个问题。 谁能给我一些关于去哪里的指示?

使用c#删除外部应用程序的标题栏

我的应用程序启动了另一个外部应用 我想在启动后删除此外部应用程序的标题栏。 这是可行的,如果是这样的话怎么办? 根据评论,我使用下面的工作代码 //Finds a window by class name [DllImport(“USER32.DLL”)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //Sets a window to be a child window of another window [DllImport(“USER32.DLL”)] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); //Sets window attributes [DllImport(“USER32.DLL”)] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); //Gets window […]

如何在打开一个进程(记事本)后将焦点重新设置回forms?

我使用Process.Start()从程序中打开一个记事本,但新打开的记事本覆盖了屏幕。 但我确实希望我的应用程序保持其重点。 我同样(使用相同的Process.Start)打开MS Excel和Word,但要将焦点重新放回到我的表单,我需要写的是: this.Focus(); 但是用记事本怪起来:我打开记事本(以及所有其他这样的过程) Process process = new Process(); process.StartInfo.UseShellExecute = true; process.EnableRaisingEvents = true; process.StartInfo.FileName = @”abc.log”; process.Start(); 现在记事本成为焦点。 我试过这些: this.Activate() , this.Focus() ,不用说了 [DllImport(“user32.dll”, CharSet=CharSet.Auto, ExactSpelling=true)] public static extern IntPtr SetFocus(HandleRef hWnd); { IntPtr hWnd = myProcess.Handle; SetFocus(new HandleRef(null, hWnd)); } [DllImport(“User32”)] private static extern int SetForegroundWindow(IntPtr hwnd); [DllImportAttribute(“User32.DLL”)] private static […]

从ASP.NET C#启动一个程序

我有一个程序(我创建),我想在网页加载时在服务器上启动它。 这是我的代码 public partial class _Default : System.Web.UI.Page { Process app = new Process(); protected void Page_Load(object sender, EventArgs e) { app.StartInfo.FileName = @”D:/Path to /My/Program to be run.exe”; app.Start(); } } 现在应用程序“运行”但它立即崩溃。 如果我只是运行应用程序(通过双击exe)它运行,一切都很好。 有谁看到我在这里遗失了什么?

即使进程正在运行,Process.HasExited也会返回true?

我一直在观察Process.HasExited有时会返回true即使进程仍在运行。 我的代码在下面启动一个名为“testprogram.exe”的进程,然后等待它退出。 问题是有时我会抛出exception; 似乎即使HasExited返回true的进程本身仍然存在 – 这怎么可能? 我的程序在它终止之前写入日志文件,因此我需要在读取之前确保该日志文件存在(也就是进程已终止/完成)。 不断检查它的存在不是一种选择。 // Create new process object process = new Process(); // Setup event handlers process.EnableRaisingEvents = true; process.OutputDataReceived += OutputDataReceivedEvent; process.ErrorDataReceived += ErrorDataReceivedEvent; process.Exited += ProgramExitedEvent; // Setup start info ProcessStartInfo psi = new ProcessStartInfo { FileName = ExePath, // Must be false to redirect IO UseShellExecute = […]

父进程在C#中终止时如何终止子进程

任务:如果父进程终止,则自动终止所有子进程。 父进程不仅可以以正确的方式终止,还可以通过在ProcessExplorer中进行终止来终止。 我该怎么做? 在С主题建议中使用Job对象的类似问题。 如何在C#中使用它而不导出外部DLL? 我试着使用Job Objects。 但是这段代码不能正常工作: var job = PInvoke.CreateJobObject(null, null); var jobli = new PInvoke.JOBOBJECT_BASIC_LIMIT_INFORMATION(); jobli.LimitFlags = PInvoke.LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_PRIORITY_CLASS | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION | PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY; var res = PInvoke.SetInformationJobObject(job, PInvoke.JOBOBJECTINFOCLASS.JobObjectBasicLimitInformation, jobli, 48); if (!res) { int b = PInvoke.GetLastError(); Console.WriteLine(“Error ” + b); } var Prc = Process.Start(…); PInvoke.AssignProcessToJobObject(job, Prc.Handle); PInvoke.SetInformationJobObject返回错误。 […]

如何使用C#获取错误消息

对于vsinstr -coverage hello.exe ,我可以使用C#代码,如下所示。 Process p = new Process(); StringBuilder sb = new StringBuilder(“/COVERAGE “); sb.Append(“hello.exe”); p.StartInfo.FileName = “vsinstr.exe”; p.StartInfo.Arguments = sb.ToString(); p.Start(); p.WaitForExit(); 当出现错误时,我收到错误消息: Error VSP1018: VSInstr does not support processing binaries that are already instrumented. 。 如何使用C#获取此错误消息? 解决了 我可以从答案中获取错误消息。 using System; using System.Text; using System.Diagnostics; // You must add a reference to Microsoft.VisualStudio.Coverage.Monitor.dll […]