- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个实用程序 ( http://reg2run.sf.net ),以防不带参数的执行作为 Windows 应用程序(显示 OpenFileDialog 等),否则 - 作为控制台应用程序。
所以,在第一种情况下,我不想显示控制台窗口,这就是项目是 Windows 应用程序的原因。但在第二 - 我需要展示它,它是用
创建的if (ptrNew == IntPtr.Zero)
{
ptrNew = GetStdHandle(-11);
}
if (!AllocConsole())
{
throw new ExternalCallException("AllocConsole");
}
ptrNew = CreateFile("CONOUT$", 0x40000000, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
if (!SetStdHandle(-11, ptrNew))
{
throw new ExternalCallException("SetStdHandle");
}
StreamWriter newOut = new StreamWriter(Console.OpenStandardOutput());
newOut.AutoFlush = true;
Console.SetOut(newOut);
Console.SetError(newOut);
我想要的是获取父进程标准输出并使用它(如果存在)(以防通过 cmd.exe 或 Far Manager 执行)。我该怎么做?
我试过了
static Process GetParentProc()
{
int pidParent = 0;
int pidCurrent = Process.GetCurrentProcess().Id;
IntPtr hSnapshot = CreateToolhelp32Snapshot(2, 0);
if (hSnapshot == IntPtr.Zero)
{
return null;
}
PROCESSENTRY32 oProcInfo = new PROCESSENTRY32();
oProcInfo.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
if (!Process32First(hSnapshot, ref oProcInfo))
{
return null;
}
do
{
if (pidCurrent == oProcInfo.th32ProcessID)
{
pidParent = (int)oProcInfo.th32ParentProcessID;
}
}
while (pidParent == 0 && Process32Next(hSnapshot, ref oProcInfo));
if (pidParent > 0)
{
return Process.GetProcessById(pidParent);
}
else
{
return null;
}
和
StreamWriter newOut = GetParentProc().StandardInput;
但得到 InvalidOperationException:StandardIn 没有被重定向。因为
GetParentProc().StartInfo.RedirectStandardOutput = false
最佳答案
对于需要根据上下文在 Windows 上选择是充当控制台还是 GUI 应用程序的应用程序,有几种方法:
让我详细介绍一下 Cygwin 上的 rxvt 是如何工作的。 Rxvt 是一个终端仿真器,通常在 X Window 系统上运行。由于 Win32 控制台的局限性,Cygwin 将其打包为功能更全面的控制台,支持诸如大量历史行、动态调整大小、每个实例可配置的字体和颜色主题、非应用程序卡住鼠标选择等功能和复制等。为了在 Windows 上本地运行,Cygwin 附带的 rxvt 包括一个用于 Win32 的小型 X11 包装器库。出于与现有 native Win32 可执行文件兼容的原因,Windows 上的 Rxvt 实际上是一个控制台应用程序,但大多数时候您永远看不到控制台;您只会看到 rxvt 终端仿真器窗口本身。
它的工作方式在 rxvt 源代码树的 rxvt/W11/wrap/wrap.c
中,在名为 hideConsole()
的函数中具体实现。基本上,它打开它的控制台(使用 CreateFile("CONOUT$"...)
),并检查光标位置是否在 (0,0)(使用 GetConsoleScreenBufferInfo ()
在控制台句柄上)。
如果是,则它推断它是作为独立应用程序启动的,而不是从控制台父应用程序启动的,因此它知道操作系统已经为该进程创建了专用的 Win32 控制台。它继续隐藏这个控制台窗口,但它必须首先找到它。它使用 SetConsoleTitle
将控制台窗口的标题设置为基于应用程序名称和当前线程 ID 的唯一值。然后它使用 FindWindow
找到这个窗口的句柄(如果需要,周期性地 Sleep
几毫秒来改变标题,因为控制台窗口实际上是由不同的进程控制的完全在 Windows 中)。当它最终找到窗口句柄时,它使用 ShowWindowAsync
隐藏它,并传入 SW_HIDE
。
使用这种方法,您可以编写一个应用程序:
唯一的缺点是在应用程序启动时控制台窗口会非常短暂地闪烁。
关于c# - 如何抓取父进程标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377911/
我是 Linux 的新手,并且继承了保持我们的单一 Linux 服务器运行的职责。这是我们的SVN服务器,所以比较重要。 原来在我之前维护它的人有一个 cron 任务,当有太多 svnserve 进程
Node 虽然自身存在多个线程,但是运行在 v8 上的 JavaScript 是单线程的。Node 的 child_process 模块用于创建子进程,我们可以通过子进程充分利用 CPU。范例:
Jenkins 有这么多进程处于事件状态是否正常? 我检查了我的设置,我只配置了 2 个“执行者”... htop http://d.pr/i/RZzG+ 最佳答案 您不仅要限制 Master 中的执
我正在尝试在 scala 中运行这样的 bash 命令: cat "example file.txt" | grep abc Scala 有一个特殊的流程管道语法,所以这是我的第一个方法: val f
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我需要一些帮助来理解并发编程的基础知识。事实上,我读得越多,就越感到困惑。因此,我理解进程是顺序执行的程序的一个实例,并且它可以由一个或多个线程组成。在单核CPU中,一次只能执行一个线程,而在多核CP
我的问题是在上一次集成测试后服务器进程没有关闭。 在integration.rs中,我有: lazy_static! { static ref SERVER: Arc> = {
我正在使用 Scala scala.sys.process图书馆。 我知道我可以用 ! 捕获退出代码和输出 !!但是如果我想同时捕获两者呢? 我看过这个答案 https://stackoverflow
我正在开发一个C++类(MyClass.cpp),将其编译为动态共享库(MyClass.so)。 同一台Linux计算机上运行的两个不同应用程序将使用此共享库。 它们是两个不同的应用程序。它不是多线程
我在我的 C 程序中使用 recvfrom() 从多个客户端接收 UDP 数据包,这些客户端可以使用自定义用户名登录。一旦他们登录,我希望他们的用户名与唯一的客户端进程配对,这样服务器就可以通过数据包
如何更改程序,以便函数 function_delayed_1 和 function_delayed_2 仅同时执行一次: int main(int argc, char *argv[]) {
考虑这两个程序: //in #define MAX 50 int main(int argc, char* argv[]) { int *count; int fd=shm
请告诉我如何一次打开三个终端,这样我的项目就可以轻松执行,而不必打开三个终端三次然后运行三个exe文件。请问我们如何通过脚本来做到这一点,即打开三个终端并执行三个 exe 文件。 最佳答案 在后台运行
我编写了一个监控服务来跟踪一组进程,并在服务行为异常、内存使用率高、超出 CPU 运行时间等时发出通知。 这在我的本地计算机上运行良好,但我需要它指向远程机器并获取这些机器上的进程信息。 我的方法,在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我有一个允许用户上传文件的应用程序。上传完成后,必须在服务器上完成许多处理步骤(解压、存储、验证等...),因此稍后会在一切完成后通过电子邮件通知用户。 我见过很多示例,其中 System.Compo
这个问题对很多人来说可能听起来很愚蠢,但我想对这个话题有一个清晰的理解。例如:当我们在 linux(ubuntu, x86) 上构建一个 C 程序时,它会在成功编译和链接过程后生成 a.out。 a.
ps -eaf | grep java 命令在这里不是识别进程是否是 java 进程的解决方案,因为执行此命令后我的许多 java 进程未在输出中列出。 最佳答案 简答(希望有人写一个更全面的): 获
我有几个与内核态和用户态的 Windows 进程相关的问题。 如果我有一个 hello world 应用程序和一个暴露新系统调用 foo() 的 hello world 驱动程序,我很好奇在内核模式下
我找不到很多关于 Windows 中不受信任的完整性级别的信息,对此有一些疑问: 是否有不受信任的完整性级别进程可以创建命名对象的地方? (互斥锁、事件等) 不受信任的完整性级别进程是否应该能够打开一
我是一名优秀的程序员,十分优秀!