摘要: 今天我遇到一个诡异的问题:我的Unittest在VisualStudio中是通过了,但是在我们的Build脚本中失败了。我们的Build的脚本调用的是MsTest,而MsTest最后会调用VsTestHost.exe。VisualStudio也是通过这个VsTestHost来进行UnitTest的。一样的VsTestHost,不一样的结果。问题的答案是这样子的:VisualStudio准备Unit... 阅读全文
posted @ 2010-11-22 12:25 夜深沉 阅读(329) 评论(0) 推荐(0)
摘要: 在.NET中创建一个进程是一件相当容易的事情。但是要是想创建以后后台进程(没有任何窗口),需要一些额外的设置:var process = new Process() { StartInfo = new ProcessStartInfo("executable file name", "arguments") { CreateNoWindow = true, UseShellExecute = fa... 阅读全文
posted @ 2010-11-22 12:14 夜深沉 阅读(2518) 评论(0) 推荐(0)
摘要: 因为一些安全原因,有些公司会把USB硬盘从Windows系统中禁用掉。很不幸的是,我现在就是供职于这样的一公司。这里是我找回我禁用掉的硬盘的方法:在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor中查找一个叫做Start的DWORD的键。如果这个值没有或者这个值不等于3,就创建或者将这个值改为3。 阅读全文
posted @ 2010-11-22 12:11 夜深沉 阅读(203) 评论(0) 推荐(0)
摘要: 前几天我在Windows 2008 X64 server上面用GFlags来调试一个Windows服务。但是我选中的的debugger就是不能正常启动。要想说清楚这个问题必须从GFlags的工作原理说起:GFlags的大部分工作其实并不神秘——修改注册表。Windows的行为会根据这些注册表项的变化来做出相应的变化。如果我们想叫进程启动的时候同时启动调试器,我们就需要在HK... 阅读全文
posted @ 2010-11-18 12:49 夜深沉 阅读(659) 评论(0) 推荐(0)
摘要: 首先,你可以在调试器中启动被调试进程。如果你打算调试一个正在运行的进程,你可以用将调试器附加(attach)的被调试进程上。但是如果你想当进程启动时就开始调试,例如:调试一个Windows service,就有点麻烦了。如果你有被调试进程的代码,你可以考虑加入DebugBreak()或者__asm { int 3 }来迫使被调试进程抛出一个调试异常。Windows检测到这个调试异常,将启动vsji... 阅读全文
posted @ 2010-11-18 12:34 夜深沉 阅读(770) 评论(0) 推荐(0)
摘要: 解决了mp3文件ID3的乱码问题之后呢,我心里还是挺美的。不过……(天下事就怕这“不过”二字啊!)我听cue+ape(flac)文件的时候还是有乱码。谁叫我是一个挑剔的人呢。继续想办法吧…… 当我随手打开cue文件之后,发现这种文件就是一个plain text文件。嗯,这样子问题就好办了。它就转变成了如何把GBK编码的文件转换... 阅读全文
posted @ 2010-11-16 08:55 夜深沉 阅读(248) 评论(0) 推荐(0)
摘要: 我这个人吧,是一个伪文艺青年,喜欢coding的时候听些流行小曲啥的。不幸的是,我现在正给洋大爷打工,公司的电脑必需是英文的操作系统。我听小曲的听得比较high的时候,想看看这曲叫啥名字啊,总是看到了一堆乱码,于是我就不high了。 最早我用AppLocale来启动千千静听来解决这个问题。这次乱码是没有了,不过每次启动千千静听的时候还是要多点一次鼠标来关闭AppLocale的对话框。于是我还是不h... 阅读全文
posted @ 2010-11-16 08:53 夜深沉 阅读(205) 评论(0) 推荐(0)
摘要: 最近我在准备一个关于Windows内存管理的演讲。其中的一个议题是堆(Heap)。众所周知,C++中的new操作符会调用到C中的malloc函数的,而malloc函数是依赖于KERNEL32.DLL中的HeapAlloc(…)。 为了演示这3个函数的关系,我写了一个简单的程序。在这个程序会分别调用new和malloc。我在KERNEL32!HeapAlloc上设置了断点。在程序运行起来... 阅读全文
posted @ 2010-11-15 13:31 夜深沉 阅读(506) 评论(0) 推荐(0)
摘要: 这里我向大家介绍一个Visual studio的宏(Macro)来给源代码添加注释。 打开Visual studio->Tools->Macros->Marcros IDE,添加下面的代码: 这样,当你每次运行这个宏的时候,都会给你Visual studio的当前的文档添加如下格式的文件头注释: 看起来还挺COOL的,哈。 阅读全文
posted @ 2010-11-15 12:50 夜深沉 阅读(1171) 评论(0) 推荐(0)
摘要: 最近,我尝试对我项目里面的DLL文件的基址重新定位,因为重定位可以提高系统的启动速度。在完成了重定位之后,我想测量一下我的应用的启动速度到底有了多大的提升。但是如何判断一个进程是不是已经完成了初始化呢?一个Windows API帮助了我:WaitForInputIdle"。 这个API函数一直等待知道指定的进程在创建该应用的第一个窗口的线程中没有任何阻塞的输入。 顺便提一下,在我的例子中基址重定位... 阅读全文
posted @ 2010-11-15 12:45 夜深沉 阅读(734) 评论(0) 推荐(0)