显示测试模式 Windows 7 内部版本 7600/7601 的解决办法

因为多种原因,桌面右下角会显示测试模式 Windows 7 内部版本 7601 的水印信息。很多时候检查发现自己的 Windows 是正常激活状态,以为装了一个未经授权的 Windows 7,其实不一定,这种情况只是 Windows 7 进入了测试模式而已。而测试模式一般是被用于测试人员测试驱动程序使用的。

解决办法:
  1. 单击“开始”——“所有程序”——“附件”,找到“命令行提示符”,右键选择“以管理员身份运行”
  2. 在命令行窗口输入“bcdedit /set testsigning off”
  3. 确定操作顺利成功完成。

VBScript 注册表遍历(枚举)启动项的方法

VBScript 中对注册表的原生支持非常有限,仅仅在 WScript.Shell 下提供了读、写、删除这三个操作。不要想枚举遍历了。

Dim OperationRegistry
Set OperationRegistry = WScript.CreateObject("WScript.Shell")
'对注册表的读操作
OperationRegistry.RegRead()
'对注册表的写操作
OperationRegistry.RegWrite()
'对注册表的删操作
OperationRegistry.RegDelete()

我们来看一下通过 WMI 的变通方法。Win32_StartupCommand 中提供了本地自动启动项中所有项,有 HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE 中都具有 Run 和 RunOnce 项,Startup 文件夹、All Users Startup 文件夹等等。

实现代码,

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery("Select * from Win32_StartupCommand")
For Each objStartupCommand in colStartupCommands
    Wscript.Echo "Command: " & objStartupCommand.Command
    Wscript.Echo "Description: " & objStartupCommand.Description
    Wscript.Echo "Location: " & objStartupCommand.Location
    Wscript.Echo "Name: " & objStartupCommand.Name
    Wscript.Echo "User: " & objStartupCommand.User
    Wscript.Echo
Next

这用获取到 objStartupCommand.Name 后,再可以通过 RegRead、RegWrite、RegDelete 来进行所需要的操作。

Windows 下读取 Linux ext2/ext3 文件系统

非常喜欢这个工具,不仅仅能读取硬盘上的 ext2/ext3 分区内容,而且也能够读取带分区信息的 img 文件。这对读取某些厂商制作的 Linux 驱动盘十分有用。这个工具的作者还制作了很多有趣的工具,比如鼎鼎大名的 dd for windows

安装这个之后能够在 Windows 的资源管理器(Windows Explorer)中直接访问所需要查看的分区。就是不喜欢需要安装。

非常类似 Linux Reader,也能够在资源管理器中进行 ext2/ext3 文件系统的读写。不过它也提供 mount 工具进行操作,需要安装配合的驱动。有 Windows 7 i386 和 amd64 驱动支持。

无节制开发导致的苦果

最近美国那边人事变动,那边的manager换了个韩国人,原先写了个Testlink OS assignment的page,最近这个韩国人怎么都用不来,说总是报超时。说实话这个问题在我做完程序的时候就有点留心,想着等啥时候闲下来再来搞下的。这下给新manager留下了个坏影响,绝对失策。还害的美国那边好多同事为我解释,哎。。。自己的错误还是要自己来更正的。 来说说这个问题,很简单,当时因为在本地开发调试的关系,没有考虑到数据库在美国,再加上发了个庞大复杂的sql command过去,当时在本地查询就要消耗20来秒,极其失策的设计。这样美国那边发现速度很慢,多人同时查看,导致并发速度更加慢,然后程序直接报超时了。周五想急救下,将超时从30秒改成180秒,那个韩国人直接说waiting fooorever。自己测试了下,2线程并发原先20秒能完成的这下子需要120多秒才能做完了。知道问题所在了,sql语句太大了。昨天改了下。ok了,消耗是0.3秒,一般返回0.4秒,来回一趟一般也就3秒左右。呵呵,自己的问题啦,Paul笑称太平洋太大了,太远了。 提醒下自己咯,以后开发需要考虑资源问题。

GridView vs DataGrid

dotNet 2.0后,M$推荐使用GridView取代DataGrid(Comparing the GridView and DataGrid Web Server Controls)。在做Testlink测试Case的Chart,然后想在表中插入HTML format的时候出现了奇怪的问题。DataGrid一切正常,GridView貌似对直接插入的HTML进行了encode,HTML原始显示了出来。

狂搜一遍,

protected void gvTP_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[1].Text = Server.HtmlDecode(e.Row.Cells[1].Text);
}
}

这下加入的HTML format就不会给encode咯。

GridView mouseover 的高亮

由于dotnet中获得到的RowStyle中color为System.Drawing.Color类的,所以首先需要将其转换成HTML能够接受的#xxxxxx形式。写了一个函数:

string toWebColor(System.Drawing.Color theColor)
{
  if (Convert.ToString(theColor.R, 16) == "0" && Convert.ToString(theColor.G, 16) == "0"
    && Convert.ToString(theColor.B, 16) == "0")
  {
    return "#ffffff";
  }
  else
  {
    return "#" + Convert.ToString(theColor.R, 16) + Convert.ToString(theColor.G, 16)
      + Convert.ToString(theColor.B, 16);
  }
}

下边的程序就是个间隔行设置Attribute的行为:

if (e.Row.RowType == DataControlRowType.DataRow)
{
  if (e.Row.RowState == DataControlRowState.Normal)
  {
    e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='orange'");
    e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='" +
      toWebColor(GridView.RowStyle.BackColor) + "'");
  }
  else if (e.Row.RowState == DataControlRowState.Alternate)
  {
    e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='orange'");
    e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='" +
      toWebColor(GridView.AlternatingRowStyle.BackColor) + "'");
  }
  else
  {
    return;
  }
}