Articles of pipe理员

我的pipe道为什么失败?

我一直在搞.cmd脚本,想练习pipe道。 我写了一个脚本来制作文件,另一个用Notepad ++编辑它们。 制作脚本(称为create.cmd)如下所示: @echo off copy nul %1 > nul echo %1 编辑脚本(称为edit.cmd)如下所示: @echo off start notepad++.exe %1 现在,我想尝试创build一个文件,然后以文件名称的forms将其输出(因此是回波行)输出到编辑脚本中。 所以我写的是这样的: create foo.txt | edit 但是,这失败了 – 我得到一个打开的Notepad ++窗口,但我新创build的文件不会出现在那里。 我在这里失踪或做错了什么?

64位.Net应用程序中的内存限制?

在我的笔记本电脑上,运行64位Windows 7和2 GB可用内存(由任务pipe理器报告),我能够做到: var x = new Dictionary<Guid, decimal>( 30 * 1024 *1024 ); 没有更多的RAM在我手中的计算机,我想知道这是否会扩大,以便在具有4 GB可用内存的计算机上,我将能够分配60M项目而不是“只是”30M等等? 还是有其他的限制(.Net和/或Windows),我会碰到之前,我能够消耗所有可用的RAM? 更新:好的,所以我不能分配一个大于2GB的单个对象。 知道这一点很重要! 但是,我当然好奇地想知道,如果能够像这样分配2 Gb的块,我能够充分利用所有的内存: var x = new List<Dictionary<Guid, decimal>>(); for ( var i = 0 ; i < 10 ; i++ ) x.Add( new Dictionary<Guid, decimal>( 30 * 1024 *1024 ) ); 如果电脑具有> 20Gb的可用内存,这是否工作?

运行时提升Java应用程序

我的软件出现了一个令人讨厌的问题。 我正在制作与其他现有软件(游戏)交互的程序。 用户报告说他以pipe理员权限运行游戏,在这种情况下,我的程序停止工作。 简短的调查显示,有些人确实需要在pipe理员帐户下运行游戏,有些则不需要。 如果我的程序能够检测到这一点,并且如果游戏以pipe理员帐户运行,则警告用户: 如果用户点击“Elevate”,我想问Windows提升运行我的jar文件的java.exe并调用典型的UAC对话框。 很明显,这次的问题不是关于Java更新,而是JRE 我的问题是:这可能吗? Windows可以提升我的java.exe实例的权限? java有办法做到这一点? 或者我可以使用命令行命令? 我想避免重新启动程序(尽pipe这可能不是那么重要)。 编辑:如果你看看评论,你会看到没有避免重新启动一个应用程序 – 进程只能开始提升,而不是boost 。 这不幸的是,这个问题转移了问题。 基本上,现在听起来更像是:“ 如何用pipe理员权限重新启动我的应用程序? ”。 当然,除非有两个java.exe共享一个jar的窍门…

在Windows任务pipe理器中更改java进程描述

有没有一个命令行参数来设置JVM报告给Windows任务pipe理器的标题? 我所有的java进程都只显示为“javaw.exe”,其描述为“Java(TM)Platform SE binary”。 如果我可以设置一些-param =“这是日食”,那将是很好的,例如,这样我就可以很容易地将它们分开。 这将阻止我经常杀死我的IDE,而不是像tomcat。

你如何发送一个命名pipe道string从umnanaged托pipe代码空间?

我似乎有一个命名pipe道101的问题。 我有一个非常简单的设置来连接从C ++非托pipe应用程序发送到C#托pipe应用程序的单工命名pipe道。 pipe道连接,但我不能通过pipe道发送“消息”,除非我closures似乎冲洗缓冲区并传递消息的句柄。 这就像消息被阻止。 我已经尝试颠倒客户机/服务器的angular色,并调用它们与不同的国旗组合,没有任何运气。 我可以很容易地从C#托pipe到C ++非托pipe的另一个方向发送消息。 有没有人有任何见解。 任何人都可以成功地发送消息从C托pipe非C托pipe? 我可以find大量的内部amanged或非pipe理的pipe道的例子,但不能相互pipe理/从unamanged – 只是声称能够做到这一点。 在清单中,为了清楚起见,我省略了许多包装材料。 我认为相关的关键是pipe道连接/创build/读取和写入方法。 不要担心在这里阻塞/线程太多。 C#服务器端 // This runs in its own thread and so it is OK to block private void ConnectToClient() { // This server will listen to the sending client if (m_InPipeStream == null) { m_InPipeStream = new NamedPipeServerStream("TestPipe", PipeDirection.In, 1); […]

调查内存泄漏

我们在应用程序中有一个缓慢的内存泄漏,我已经通过以下步骤来分析泄漏的原因: 在GFlags中启用用户模式堆栈跟踪数据库 在Windbg中,键入以下命令: !heap -stat -h 1250000 (其中, 1250000是具有泄漏的堆的地址)比较多个转储后,我看到大小为0xC的存储器块随着时间而增加,内存泄漏。 input以下命令: !heap -flt sc给出UserPtr的这些分配,最后: 在这些地址上inputheap -p -a地址总是显示下面的分配调用堆栈: 0:000> !堆-p -a 10576ef8 address 10576ef8 found in _HEAP @ 1250000 HEAP_ENTRY Size Prev Flags UserPtr UserSize – state 10576ed0 000a 0000 [03] 10576ef8 0000c – (busy) mscoreei!CLRRuntimeInfoImpl::`vftable' 7c94b244 ntdll!RtlAllocateHeapSlowly+0x00000044 7c919c0c ntdll!RtlAllocateHeap+0x00000e64 603b14a4 mscoreei!UtilExecutionEngine::ClrHeapAlloc+0x00000014 603b14cb mscoreei!ClrHeapAlloc+0x00000023 603b14f7 mscoreei!ClrAllocInProcessHeapBootstrap+0x0000002e 603b1614 […]

命名pipe道名称是否有反斜杠?

根据MSDN , [pipe道名称]必须具有以下forms: \\.\pipe\pipename 名称的pipe道名部分可以包含除反斜杠以外的任何字符,包括数字和特殊字符。 整个pipe道名称string最多可以有256个字符。 pipe道名称不区分大小写。 但有很多例子,我已经看到命名pipe道名称与反斜杠在其中。 例如,SQL Server的标准pipe道名称是\\.\pipe\sql\query 。 从SysInternals运行PipeList显示我的机器上的名字包含一个反斜杠的pipe道很多。 那么,pipe道名称是否可以带有反斜杠呢? 我问,因为我正在用几个这样的名字创build一个服务: \\.\pipe\MyApp \\.\pipe\MyApp\0 \\.\pipe\MyApp\1 \\.\pipe\MyApp\2 在创build第一个pipe道之后,创build其他pipe道将失败,并显示Windows错误123(ERROR_INVALID_NAME)。 如果我跳过创build第一个pipe道,所有其他的,在名称中的反斜杠字符,将工作得很好。 看起来,pipe道是像文件系统一样的层次结构,如果你有一个具有特定名称的pipe道,那么这个名称就不能再用作其他pipe道的“文件夹”或容器。 当试图弄清楚这一点,我遇到了MSDN文章,现在质疑我是否应该使用反斜杠。 有什么build议?

有没有什么API来确定Linux中的虚拟地址的物理地址?

在Linux操作系统中有没有用于从虚拟地址确定物理地址的API?

Windows命令解释器:如何获取第一个pipe道命令的退出码

在下面提供的示例中,我执行nmake,然后将STDOUT / STDERRredirect到tee,然后将它发送到屏幕以及日志文件。 问题是,我试图捕获nmake退出代码,而不是三通。 我需要的是从nmake退出代码,而不是三通。 nmake | tee output.txt

UNIX与Windows内存释放

我的理解是,在unix中,当内存被释放时,内存不会被返回到操作系统,它留在进程中再次用于下一次调用malloc。 在Windows上,我知道内存实际上被返回到操作系统。 这两种做事方式有没有很大的区别,还是做同一件事情的两种不同方式? 如果这两种方法有什么优点/缺点,它们是什么? 编辑:谢谢澄清。 我一直认为这是一个操作系统的东西(因为在类似UNIX的系统中,进程似乎不会减小,而是在Windows中)。