Articles of pipe理员

在explorer-shell-extention中创build一个子菜单?

我创build了一个更改文件名的小脚本(用_replace空格等)。 我用参数来控制这个脚本。 现在我想将其包含到我的资源pipe理器的shell扩展,所以我试图添加以下registry项: HKEY_CLASSES_ROOT\*\shell\edit filname method a\command HKEY_CLASSES_ROOT\*\shell\edit filname method b\command HKEY_CLASSES_ROOT\*\shell\edit filname method c\command 等等。 它工作正常,但我想打包所有这些方法一起进入一个子菜单。 有点像“打开”选项。 那可能吗?

没有足够的内存或没有足够的手柄?

我正在一个大规模的项目中提供了一个自定义的(非常好的和强大的)框架,我们必须使用它来显示表单和视图。 有一个抽象类StrategyEditor(从框架中的某个类派生而来),每当打开一个新的StrategyForm时就实例化这个类。 StrategyForm (一个定制的窗口框架)包含StrategyEditor 。 StrategyEditor包含StrategyTab 。 StrategyTab包含StrategyCanvas 。 这是大类的一小部分,以澄清如果在运行时分配一个StrategyForm对象在内存中将会创build许多对象。 我的组件拥有上面提到的所有这些类,除了StrategyForm其代码不在我的控制之下。 现在,在运行时,用户打开许多策略对象(触发创build新的StrategyForm对象)。 44个策略对象,我们看到由应用程序创build的用户对象句柄(我将从此处使用UOH)达到约20k +,而在registry中,句柄的默认数量为10k。 在这里阅读更多关于用户对象。 在不同的机器上进行testing表明,打开的策略对象的数量对于popup的消息是不同的 – 如果是44则是m / c,而另一个是40。 当我们看到消息popup时,这意味着应用程序将会响应缓慢。 它会变得更糟,只有更less的对象,然后创build窗口框架和后续的对象失败。 我们首先认为这是不够记忆的问题。 但是随后在C#中阅读更多关于new有助于理解如果应用程序内存不足将会抛出exception。 这不是一个内存问题,我觉得(任务pipe理器还显示1.5GB +可用内存。) M / C规格 酷睿2双核2GHz + 4GB内存 80GB +页面文件的可用磁盘空间 虚拟内存集:4000 – 6000 我的问题 Q1。 这看起来像是一个内存问题,我错了,它不是? Q2。 这是否意味着用尽了免费的UOH(正如我所想的那样),并且导致了创build窗口句柄失败? Q3。 我们如何避免加载一个StrategyEditor对象(超出门槛,关注UOH的当前使用)? (我们已经知道如何获取使用的UOH数量,所以不要去那里。)请记住,调用new StrategyForm()不在我的组件的控制范围之内。 Q4。 我有点困惑 – 到底是什么把手到用户对象 ? MSDN是在谈论我们创build的任何对象还是只有一些特定的对象,如窗口句柄,光标句柄,图标句柄? Q5。 究竟是什么原因使用了UOH? (几乎与Q4相同) […]

在Windows资源pipe理器中编程select多个文件

我可以在Windows资源pipe理器中显示和select一个文件,如下所示: explorer.exe /select, "c:\path\to\file.txt" 但是,我不能找出如何select多个文件。 我没有尝试工作的select排列组合。 注:我看了这些页面的文档,都没有帮助。 https://support.microsoft.com/kb/314853 http://www.infocellar.com/Win98/explorer-switches.htm

在我的过程中,所有这些没有提及的保留的记忆是什么?

我使用SysInternals中的VMMap来查看WinXP上Win32 C ++进程分配的内存,我看到一堆分配,其中分配内存的一部分被保留但未提交。 据我所知,从我的阅读和testing中,在C ++程序中使用的所有常见内存分配器(例如,malloc,new,LocalAlloc,GlobalAlloc)总是分配完全承诺的内存块。 堆是预留内存的代码的常见示例,但是直到需要时才提交。 我怀疑其中一些块是Windows / CRT堆,但似乎有更多的这些types的块比我预期的堆。 我在这个过程中看到了30个这样的块,大小在64K到8MB之间,而且我知道我的代码永远不会故意调用VirtualAlloc来分配保留的,未提交的内存。 以下是VMMap的几个示例: http ://www.flickr.com/photos/95123032@N00/5280550393/ 还有什么会分配这样的内存块,其中大部分是保留的,但没有提交? 我的过程有30堆是否合理? 谢谢。

带有MmMapIoSpace的幻数

所以在用MmMapIoSpace映射一个内存空间时,我注意到过去的某个时候,写入的数据只是被丢弃了。 没有错误,断点甚至错误检查。 一切正常,没有任何不利影响。 我决定做一个写/读testing(驱动程序将1写入每个字节的长度的预期大小)和读者(userland)模式将读取和报告1的结束。 它的数字是3208,这是一个看起来不错的整数(/ 8 = 401,/ 256 = 12等) 这是怎么回事? 为什么我不能映射整个缓冲区空间? 编辑并在64位下降到2492。

如何以编程方式停止笔记本电脑电池充电

有一些简单的信息可以find电池的状态,或者是否充电。 (GetSystemPowerStatus API或System.Windows.Forms.SystemInformation.PowerStatus)。 我希望能够根据一些标准停止电池充电,例如电池电量> 20%。 有没有一个API来做到这一点?

在Windows构build服务器上使用Internet Explorer驱动程序进行屏幕截图时出现黑屏

我正在我们的构build服务器上运行几个自动化的浏览器testingselenium。 运行Chrome或Firefox驱动程序时不会出现屏幕截图的问题,但运行Internet Explorer驱动程序时,我只会看到一个黑屏。 虚拟机 selenium版本:2.53.0 IEDriver:2.53.0 操作系统:Windows Server 2012 浏览器:Internet Explorer 11 我已经通过了文档https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver中所有必需的configuration 我也尝试了第三种方法: https : //lostechies.com/keithdahlby/2011/08/13/allowing-a-windows-service-to-interact-with-desktop-without-localsystem/ 我还启用了全球的服务交互: https : //msdn.microsoft.com/en-us/library/windows/desktop/ms683502(v=vs.85).aspx 当我远程访问构build服务器时,我可以触发手动运行testing。 这工作正常。 因此,我们的CI(TeamCity)设置与构build服务器进行交互必定存在问题。 我目前卡住,可能需要一些帮助?

出于虚拟内存地址空间(Borland C ++ Builder 6程序)

我有一些在C ++ Builder 6下编写的应用程序的问题。经过一段时间的运行(一周,一个月),应用程序崩溃并closures,没有任何错误消息。 在我的应用程序日志崩溃前不久,我得到了许多“内存不足”的例外。 我查看了抛出内存exception的过程(下面的截图),它有很多未提交的私有内存空间。 什么可能是这种行为的原因? 几年前,我曾经有过这样的问题。 原因是在链接器选项中未选中“使用dynamic库”选项。 当我检查后,问题消失,反之亦然。 我所做的testing应用程序只是调用“新字符[1000000]”,然后删除。 每次释放内存(在Windows任务pipe理器中没有提交的内存上升),但是一段时间后,内存不足,VMMap显示了完全相同的结果。 很多保留的私人内存,但大部分都没有提交。 现在的问题返回,但我不能以同样的方式解决它。 我不知道是不是这个原因,但是我把Builder 6和2010安装在同一台机器上。 现在我只有Builder 6,看起来我不能像以前那样用testing应用程序重现错误。 以太的方式似乎有一些内存pipe理器错误什么的。 CodeGuard不显示任何内存泄漏。 当我用“new”创build内存块时,它立即显示在“内存提交大小”中,当删除内存使用量减less时,所以我假设内存泄漏不是这种情况,任务pipe理器不会显示太多的“内存提交大小” 。 有什么我可以做的吗? 有没有什么办法可以释放未提交的内存? 如何进一步诊断问题? 截图: http : //i.stack.imgur.com/UKuTZ.jpg

我怎样才能把初始的inputinput进来,然后互动呢?

我希望能够在启动一个交互过程时注入一个初始命令,以便我可以这样做: echo "initial command" | INSERT_MAGIC_HERE some_tool tool> initial command [result of initial command] tool> [now I type an interactive command] 什么不行: 只是pipe道的初始命令不起作用,因为这导致stdin没有连接到terminal 写入/ dev / pts / [number]会将输出发送到terminal,而不是input到进程中,就好像它来自terminal 什么将会有缺点: 做一个命令,分出一个孩子,写入它的标准input,然后转发一切从它自己的标准input。 下行 – terminal控制的东西(如线条与字符模式)将无法正常工作。 也许我可以用代理伪terminal做些什么? 做一个修改后的xterm版本(我正在为这个任务启动一个),用命令行选项在遇到所需的提示string后注入其他命令。 丑陋。 做一个我试图运行的工具的修改版本,以便它接受命令行上的初始命令。 打破标准安装。 (顺便提一句,目前感兴趣的工具是android的adb shell – 我想在手机上打开一个交互式shell,自动运行一个命令,然后进行交互式会话)

与Windows上的本地主机IPC上的命名pipe道相比,TCP套接字有多慢?

我正在开发一个TCP代理服务器,放在一个TCP服务器的前面,该服务器应该处理来自野生互联网的500到1000个活动连接。 代理与服务在同一台机器上运行,并且大部分是透明的。 该服务大部分不知道该代理,唯一的例外是通知客户端的真实远程IP地址。 这意味着,对于每个入站打开的TCP套接字,服务器上还有两个套接字:代理中的第二个套接字,以及代理服务器后面的实际服务中的第二个套接字。 两个代理套接字上的发送和接收窗口大小设置为1024个字节。 这对性能有什么影响? 这种configuration有多慢? 我应该把一些努力改变服务使用命名pipe道(或其他IPC机制),或本地TCP套接字大部分是一个有效的IPC? 两个应用程序的合并不是一个选项。 现在我们被困在两个过程configuration中。 编辑 :在同一个硬件上有两个单独的过程的原因是100%的经济。 我们只有一台服务器,而我们不打算多收(没钱)。 TCP服务是Visual Basic 6中的一个传统软件,超出了我们的预期。 代理是C ++。 我们没有时间,金钱和人力来重写和迁移VB6代码到一个现代的编程环境。 代理服务器是我们试图减轻服务的特定性能问题,这是我们不时得到的DDoS攻击 。 代理是开源的, 这里是项目源代码 。