Tag: 进程

从运行过程中获取DLL名称可能吗?

我正在寻找一种从正在运行的进程中获取DLL名称的方法,对不起,如果我表达自己很糟糕的话。 我需要通过它的名称或PID“连接”到这个进程,并检索它正在使用的DLL名称,如果可能的话。 问候。

删除某人打开文件的目录

我试图以编程方式删除和替换应用程序的内容,“应用程序A”,使用“安装程序”程序,这只是一个自定义WPF .exe应用程序,我们称之为“应用程序B”。 (我的问题涉及“App B”中的代码。) GUI设置(不是特别重要) 应用程序B有一个GUI,用户可以在其中选择计算机名称以复制App A。 管理员使用文件选择器通过单击“App A.exe”来填充本地计算机上的源目录路径。 还有用于用户名和密码的文本框,因此管理员可以为将要提供App A的目标文件服务器输入其凭据 – 代码模拟用户以防止权限问题。 “复制”按钮启动例程。 杀死应用程序A,文件进程和执行文件删除 复制例程首先杀死域中所有计算机上的“App A.exe”进程,以及explorer.exe,以防它们打开App A的资源管理器文件夹。 显然这将在下class后完成,但有些人可能仍然打开机器并在回家之前锁上他们的机器。 这真的是我想要解决的问题的基础。 在复制更新的文件之前,我们要删除整个旧目录。 为了删除目录(及其子目录),必须删除其中的每个文件。 但是说他们从App A的文件夹中打开了一个文件。 代码在删除任何文件之前找到任何锁定进程(使用Eric J.的答案, 如何找出哪个进程使用.NET锁定文件? ),它会在任何计算机上杀死该进程。继续前进。 如果是本地的,它只使用: public static void localProcessKill(string processName) { foreach (Process p in Process.GetProcessesByName(processName)) { p.Kill(); } } 如果是远程的,它使用WMI: public static void remoteProcessKill(string computerName, string fullUserName, string pword, string […]

你如何在.NET(C#)中杀死特定用户的进程?

我使用的是多用户Windows Server,rdpclip bug每天都会让我们感到害怕。 我们通常只是打开任务管理器并杀死然后重新启动rdpclip,但这是一个痛苦的屁股。 我写了一个powershell脚本用于杀死然后重新启动rdpclip,但是没有人使用它,因为它是一个脚本(更不用说执行策略仅限于框)。 我正在尝试编写一个快速而又脏的Windows应用程序,您可以单击按钮来杀死rdpclip并重新启动它。 但是我想将它限制为当前用户,并且找不到执行此操作的Process类的方法。 到目前为止,这就是我所拥有的: Process[] processlist = Process.GetProcesses(); foreach(Process theprocess in processlist) { if (theprocess.ProcessName == “rdpclip”) { theprocess.Kill(); Process.Start(“rdpclip”); } } 我不确定,但我认为这会杀死所有的rdpclip进程。 我想按用户选择,就像我的powershell脚本一样: taskkill /fi “username eq $env:username” /im rdpclip.exe & rdpclip.ex 我想我可以从我的可执行文件中调用powershell脚本,但这看起来相当糟糕。 对于任何格式问题都要提前道歉,这是我第一次来这里。 更新:我还需要知道如何获取当前用户并仅选择那些进程。 下面提出的WMI解决方案对我没有帮助。 UPDATE2:好的,我已经弄清楚如何获取当前用户,但它与远程桌面上的进程用户不匹配。 任何人都知道如何获得用户名而不是SID? 干杯,fr0man

在运行时切换Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

我想在运行时切换进程的可见性 ,我有一个Windows窗体应用程序,它通过一个进程启动默认隐藏的另一个控制台应用程序,但我想允许管理员用户通过复选框切换此状态并显示控制台应用程序他们选择。 我有这个,但它不起作用: private void checkBox1_CheckedChanged(object sender, EventArgs e) { ProcessWindowStyle state = cvarDataServiceProcess.StartInfo.WindowStyle; if (state == ProcessWindowStyle.Hidden) cvarDataServiceProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; else if (state == ProcessWindowStyle.Normal) cvarDataServiceProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; }

c#重定向(管道)进程输出到另一个进程

我正在尝试使用Process类在c#中运行一个进程。 Process p1 = new process(); p1.startinfo.filename = “xyz.exe”; p1.startinfo.arguments = //i am building it based on user’s input. p1.start(); 所以基于用户输入我正在构建参数值。 现在我有一个案例,我必须将p1的输出传递给另一个进程说grep。 所以我基本上试过这个 p1.startinfo.arguments =“ – info | grep 1234”; 我的意图是像xyz.exe -info | grep 1234 但这似乎不适用于.net ..我实际上可以创建另一个流程变量并运行“grep”作为一个单独的进程..但我想知道是否有任何方法可以做,因为我尝试上面..

Windows服务下的进程截图

我们必须从Windows服务运行一个进程并从中获取屏幕截图。 我们尝试了BitBlt和PrintWindow Win32调用,但都给出了空白(黑色)位图。 如果我们从普通用户进程运行我们的代码,它就可以正常运行。 这有可能吗? 或者可以尝试另一种方法吗? 我们尝试的事情: 作为本地系统运行的Windows服务,以本地系统运行进程 – >屏幕截图失败 以管理员身份运行的Windows服务以管理员身份运行 – >屏幕截图失败。 以用户XYZ运行的Windows应用程序以XYZ运行流程 – >截图适用于BitBlt或PrintWindow。 尝试从本地系统检查“允许服务与桌面交互” 我们还注意到PrintWindow对我们的情况更好,如果窗口在另一个窗口后面,它可以工作。 对于其他要求,父进程和子进程必须位于同一用户下。 我们无法真正使用从一个进程到另一个进程的模拟。

如何将ctrl + c发送到c#中的进程?

我正在为命令行可执行文件编写一个包装类。 这个exe接受来自stdin的输入,直到我在命令提示符shell中命中ctrl + c,在这种情况下,它根据输入到stdout打印输出。 我想模拟ctrl + c按c#代码,将kill命令发送到.Net进程对象。 我试过调用Process.kill(),但这似乎没有给我进程的StandardOutput StreamReader。 可能有什么我做得不对劲? 这是我正在尝试使用的代码: ProcessStartInfo info = new ProcessStartInfo(exe, args); info.RedirectStandardError = true; info.RedirectStandardInput = true; info.RedirectStandardOutput = true; info.UseShellExecute = false; Process p = Process.Start(info); p.StandardInput.AutoFlush = true; p.StandardInput.WriteLine(scriptcode); p.Kill(); string error = p.StandardError.ReadToEnd(); if (!String.IsNullOrEmpty(error)) { throw new Exception(error); } string output = p.StandardOutput.ReadToEnd(); 但是,当我手动运行exe时,输出总是为空,即使我从stdout获取数据。 编辑:这是c#2.0顺便说一句

如何在Process.StandardOutput中禁用输出缓冲

这个问题不止一次被问过,但我没有在任何讨论中找到满意的答案。 我正在启动一个命令行过程,它可以对STDOUT进行实时测量,大约每秒产生一个新结果。 使用System.Diagnostics.Process.StandardOutput导致完全不可接受的延迟(超过20秒),因为STDOUT数据通过Process.StandardOutput StreamReader中的4k缓冲区工作,并且似乎没有任何方法可以解决这个问题。 调用Process.StandardOutput.BaseStream.Flush()不起作用。 我试过对Process.StandardOutput进行逐字节同步读取,但是我仍然比实际输出落后4k。 任何人至少可以validation我有可能以某种方式克服我重定向STDOUT时遇到的所有缓冲问题,并且一旦它出现在shell窗口中就会在我的应用程序中接收数据吗? 我可以inheritanceProcess类并更改StandardOutput流读取器的行为吗? 我是否需要查看原始WINAPI调用? 不知何故,这必须要完成,即使我最终编写非托管C ++来启动任务并使用输出,并将其连接起来。任何帮助都非常感谢; 我的智慧结束了…… 编辑:看来我需要的是可用于C / C ++,Perl,Python和Java的“期望”库的.Net实现(这是迄今为止我发现的唯一库)。 有谁知道这样的野兽是否存在?

如何从命令行或C#应用程序检测msbuild的状态

我正在用C#编写一个checkout,build和deployment应用程序,并且需要知道检测我对msbuild.exe调用是否成功的最佳方法。 我试图使用该过程中的错误代码,但我不确定这是否始终准确。 有没有办法(通过下面的代码)我可以判断msbuild.exe是否成功完成? try { Process msbProcess = new Process(); msbProcess.StartInfo.FileName = this.MSBuildPath; msbProcess.StartInfo.Arguments = msbArguments; msbProcess.Start(); msbProcess.WaitForExit(); if (msbProcess.ExitCode != 0) { // } else { // } msbProcess.Close(); } catch (Exception ex) { // }

C# – 如何重命名我开始的进程窗口?

有没有什么办法可以重命名我启动的应用程序的窗口标题栏? 即如果我启动Notepad.exe,我可以将其标题栏从“无标题 – 记事本”重命名为“新记事本名称”。