<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.NET</title><link>http://webuc.net/chinahuman/category/186.aspx</link><description>.NET</description><managingEditor>铁匠</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>铁匠</dc:creator><title>AVI文件格式研究中碰到的一些问题的解决办法</title><link>http://webuc.net/chinahuman/archive/2008/08/25/10099.aspx</link><pubDate>Mon, 25 Aug 2008 14:54:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2008/08/25/10099.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/10099.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2008/08/25/10099.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/10099.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/10099.aspx</trackback:ping><description>&lt;P&gt;最近在研究AVI文件格式的生成问题，碰到以下的问题，找到解决办法，共享如下：&lt;/P&gt;
&lt;P&gt;1.生成的文件格式的校验问题：&lt;/P&gt;
&lt;P&gt;因为是根据AVI RIFF File Refence这个文档来生成的，所以对错不知道。因此需要一个校验工具。偶觉得有两个工具不错：&lt;/P&gt;
&lt;P&gt;a. Gsport这个是暴风影音一类的工具会带的工具。如果格式有错误，它会提示出来。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://webuc.net/images/webuc_net/chinahuman/484/o_WindowsLiveWriter_AVI_D15F_image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=244 alt=image src="/images/webuc_net/chinahuman/484/o_WindowsLiveWriter_AVI_D15F_image_thumb_1.png" width=243 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;b.VirtualDub 在这里面点工具菜单里面有十六进制编辑器，按Ctrl+R可以显示出RIFF的树，这样比较容易找出问题来。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://webuc.net/images/webuc_net/chinahuman/484/o_WindowsLiveWriter_AVI_D15F_image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=244 alt=image src="/images/webuc_net/chinahuman/484/o_WindowsLiveWriter_AVI_D15F_image_thumb.png" width=229 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;2.一切都是按文档的说明来生成的，用播放器来播放是正常的，但是用如上的校验工具来看，里面有错位。在trunck列表里面，发现只有第一个是识别出来，后面的跳了一位无法识别。&lt;/P&gt;
&lt;P&gt;经研究发现是存在着奇偶对齐的问题，如果内容是奇数位，那么得在后面补上一位来对齐，但是这一位不能记在这个trunck的长度里面，否则解码器多读了一位可能会引起解码错误。&lt;/P&gt;
&lt;P&gt;计划把音频加入，以及功能完善化后，发布DLL供人调用。&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/10099.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>TFS下的一个问题解决（转）</title><link>http://webuc.net/chinahuman/archive/2008/07/03/10029.aspx</link><pubDate>Thu, 03 Jul 2008 13:36:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2008/07/03/10029.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/10029.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2008/07/03/10029.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/10029.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/10029.aspx</trackback:ping><description>&lt;P&gt;最近碰到了一个机子上的项目死活不能和TFS绑定，困扰很久，终于找到解决方案，原因很简单，成因也很简单，但是就是没有看到。 
&lt;P&gt;废话少说看原文：原文地址：&lt;A href="http://teamfoundation.blogspot.com/2007/12/offline-and-back-again-in-vs2008.html"&gt;http://teamfoundation.blogspot.com/2007/12/offline-and-back-again-in-vs2008.html&lt;/A&gt; 
&lt;P&gt;One of the most painful issues in VS2005 was its quirky offline support.&lt;BR&gt;&lt;BR&gt;One of the first features I have checked in Visual Studio 2008 was working offline. And what can I say - it (mostly) rocks!&lt;BR&gt;&lt;BR&gt;Let's do it step-by-step.&lt;BR&gt;
&lt;UL&gt;&lt;BR&gt;
&lt;LI&gt;You open the solution under source control and there is no connection to the server. What you get is the dialog, indicating offline condition&lt;BR&gt;&lt;IMG src="http://www.attrice.info/images/blog/offline_dialog.gif" border=0&gt;&lt;BR&gt;In Output window pane appears the log message, indicating detailed reason for the offline&lt;BR&gt;&lt;IMG src="http://www.attrice.info/images/blog/offline_output1.gif" border=0&gt;&lt;BR&gt;&lt;B&gt;Important note:&lt;/B&gt; Once the solution is opened offline, next time you open it in Visual Studio the dialog won't appear (but the output pane will show same message every time)&lt;BR&gt;&lt;IMG src="http://www.attrice.info/images/blog/offline_output2.gif" border=0&gt;&lt;BR&gt;&lt;BR&gt;
&lt;LI&gt;If you choose to change files in your solution/project when is offline, you will have a message that file is read-only once you save the changes. There is no indication of "under source control" status for offline projects or solutions&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Important note:&lt;/B&gt; When working offline, you may edit or delete existing files or add new ones, and these types of changes will be supported when going "online" with TFS server. However, file renames are not supported&lt;BR&gt;&lt;BR&gt;
&lt;LI&gt;Now let's go online. You open solution in VS and you have connection - but tranistion to online will not happen automatically. To sync solution/project back online you should use "&lt;I&gt;Go Online&lt;/I&gt;" menu, that available on right-click in Solution Explorer or in "File"-&amp;gt;"Source Control" menu.&lt;BR&gt;&lt;IMG src="http://www.attrice.info/images/blog/offline_online_menu.gif" border=0&gt;&lt;BR&gt;Once you hit "Go Online" requested, the dialog with changes "Go Online" dialog will appear detailing the changes performed while online. The dialog shows files and&lt;BR&gt;changes (add/edit/delete) performed while offline. You may choose not to pend the changes for specific files (then the file will remain writable, but will not have pending changes).&lt;BR&gt;&lt;IMG src="http://www.attrice.info/images/blog/offline_online_dialog.gif" border=0&gt;&lt;BR&gt;&lt;B&gt;Important note:&lt;/B&gt; If you did not perform any changes while offline, the appropriate message will appear&lt;BR&gt;Once online, the pending changes indications will appear in Solution Explorer.&lt;BR&gt;&lt;BR&gt;
&lt;LI&gt;If you want to unbind your solution/project from source control, all you need to do is to go to "Source Control"-&amp;gt;"Change Source Control" menu. The message will appear asking you whether you want to go online or permanently unbind your solution.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;BR&gt;But of course, there were several "&lt;I&gt;Things I did not like&lt;/I&gt;":&lt;BR&gt;
&lt;OL&gt;&lt;BR&gt;
&lt;LI&gt;No cancel on Offline dialog - either go offline or ...?&lt;BR&gt;
&lt;LI&gt;No indication for source controlled files in Solution Explorer in offline mode (similar to that of VSS) - only read-only flag on file serves as an indication&lt;BR&gt;
&lt;LI&gt;"Change Source Control" dialog does not allow one to "Disconnect", you can only "Unbind; so going offline happens only when server is not available&lt;BR&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;BR&gt;&lt;BR&gt;Overall, I should say I liked VS2008 experience very much (especially as compared with previous version). I can feel that feedback on TFS2005 offline experience was not wasted!&lt;img src ="http://webuc.net/chinahuman/aggbug/10029.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>在服务里面弹出一个窗口到用户的桌面上</title><link>http://webuc.net/chinahuman/archive/2008/05/04/9966.aspx</link><pubDate>Sun, 04 May 2008 07:17:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2008/05/04/9966.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/9966.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2008/05/04/9966.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/9966.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/9966.aspx</trackback:ping><description>&lt;P&gt;曾几何时，服务里面弹出一个窗口到桌面上不再是那么地容易了：以前只要把服务设置为允许和桌面交互就可以直接在服务启动的时候，把一个窗口弹给用户。但是现在在vista(其它的OS 下没有测试，未知)下要弹出这样的窗体，首先会弹出一个提示框提示是否接否一个服务弹出来的消息，点接受后，才会在一个全灰的桌面里面弹出这个窗口。不用想，这样的用户体验，肯定是会被直接PASS。原因很简单，因为不同的用户间的桌面是不一样的，服务用的是System的权限，在vista里面是Session0，而用户的帐户不是这个（肯定大于0）。&lt;/P&gt;
&lt;P&gt;看来，想弹出一个窗体，需要另一个程序来作辅助了。解决方案有两种：&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;开发一个程序A在启动的时候，随系统启动，并监控指定文件M，服务S有消息的时候，放在文件M里，A 感受了文件变化了，就去读这个文件里的内容，根据规则来作对应的动作。坏处很明显，当用户为了让系统跑得快的时候，这种自启动文件很容易被砍掉，导致了有些功能莫名奇妙地不可用。 
&lt;LI&gt;同样地，也是开发一个程序A，用CreateProcessAsUser这个API来创建这个A ，并且发送到用户的桌面上去。好处是可以把这个A和服务S 放在同一个程序文件里面，根据不同的参数来启动不同的功能。这样用户除非是删除整个服务，否则不会有部分功能能用，又有部分功能不能用的问题。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;现在来看看第二种方案，要想用CreateProcessAsUser这个API ，有这样几个步骤：&lt;/P&gt;
&lt;P&gt;１.取得用户的令牌（Token）&lt;/P&gt;
&lt;P&gt;２.指定好虚拟桌面&lt;/P&gt;
&lt;P&gt;３.调用API创建这个用户进程。&lt;/P&gt;
&lt;P&gt;在取得用户令牌的时候，又有几个方法：&lt;/P&gt;
&lt;P&gt;１.从用户的进程上去剥&lt;/P&gt;
&lt;P&gt;２.先用WTSGetActiveConsoleSessionId得到用户会话ID，再用WTSQueryUserToken这个API去取。&lt;/P&gt;
&lt;P&gt;不过在vista下面,服务里面的WTSGetActiveConsoleSessionId这个API得到的总是0，也就是Session0,用这个创建出来的进程，还是属于一个服务进程。(而且这个API是XP以及以后的系统才会提供的，在早点的系统上就会调用失败)所以我们只好从用户的进程上去找，用户登录的时候，一定会有的进程就是：explorer.exe，这样可以遍历所有的进程去找到这个（如果是多人同时登录这个系统里，我也不知道该怎么办了，不知道有没有高人指点一下）。&lt;/P&gt;
&lt;P&gt;这样创建出来的用户进程，在进程列表里面可以看到是活动用户的。但是如果在这里面使用一下文件选择框，或是去取一些系统目录，比如说用户的桌面，用户的收藏夹等，都会得到空。这时候因为没有指定用户环境造成的。使用CreateEnvironmentBlock这个API就可以搞定了。&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/9966.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>PowerShell的Cmdlet的生存周期和执行顺序</title><link>http://webuc.net/chinahuman/archive/2007/09/24/9501.aspx</link><pubDate>Mon, 24 Sep 2007 15:17:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2007/09/24/9501.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/9501.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2007/09/24/9501.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/9501.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/9501.aspx</trackback:ping><description>&lt;P&gt;认清了Cmdlet的生存周期和执行的顺序对于我们后续的开发和使用有相当重要的意义，因为它直接决定了到时候该怎么开发，能实现哪些功能（比如说一直需要运行的程序，就不适合用Cmdlet来完成）。&lt;/P&gt;
&lt;DIV class=csharpcode&gt;
&lt;P&gt;先让我们看一下Cmdlet的生存周期:&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt; [Cmdlet(VerbsCommon.Add, &lt;SPAN class=str&gt;"Test"&lt;/SPAN&gt;)] &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; AddTest: Cmdlet&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; BeginProcessing()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;            WriteObject(&lt;SPAN class=str&gt;"BeginProcessing"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  10:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; ProcessRecord()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  11:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  12:  &lt;/SPAN&gt;            WriteObject(&lt;SPAN class=str&gt;"ProcessRecord"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  13:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.ProcessRecord();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  14:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  15:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  16:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; EndProcessing()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  17:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  18:  &lt;/SPAN&gt;            WriteObject(&lt;SPAN class=str&gt;"EndProcessing"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  19:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.EndProcessing();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  20:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  21:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  22:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; StopProcessing()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  23:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  24:  &lt;/SPAN&gt;            WriteObject(&lt;SPAN class=str&gt;"StopProcessing"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  25:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.StopProcessing();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  26:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  27:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  28:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;我们可以发现，结果是：&lt;/PRE&gt;
&lt;P&gt;BeginProcessing&lt;BR&gt;ProcessRecord&lt;BR&gt;EndProcessing 
&lt;P&gt;基本上和我们猜测的一样的，初始化，执行，完成 
&lt;P&gt;可以判断StopProcessing这是在Cmdlet被中止的时候才会触发的。&lt;/P&gt;
&lt;P&gt;再让我们看一下Cmdlet的生存周期:&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; TaskManager&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; runCount = 0;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; Run()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;        { &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; runCount ++;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;    [Cmdlet(VerbsCommon.Add, &lt;SPAN class=str&gt;"Test"&lt;/SPAN&gt;)] &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; AddTest: Cmdlet&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; ProcessRecord()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;        {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;            WriteObject(TaskManager.Run());&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.ProcessRecord();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;    }&lt;/PRE&gt;运行这个Cmdlet，多次运行，以及关掉PS后，重新加载后执行的情况来看，我们可以看出：Cmdlet所在程序集从Add-PSSnapIn加载到PowerShell里后,也就是这个DLL被启动起来了,直到这个PowerShell被关掉,完成它的一个生命周期.也就是说,在这运行过程中,我们可以把很多数据记录在静态成员里面,比如说运行的记录等.&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;/DIV&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/9501.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>PowerShell的CmdLet开发的HelloWorld</title><link>http://webuc.net/chinahuman/archive/2007/09/18/9483.aspx</link><pubDate>Tue, 18 Sep 2007 09:32:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2007/09/18/9483.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/9483.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2007/09/18/9483.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/9483.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/9483.aspx</trackback:ping><description>&lt;p&gt;安装完windows Vista SDK后,终于可以开始CmdLet的开发了.如果安装了Samples的同学,可以直接去看示例:X:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\SysMgmt\WindowsPowerShell 其中X是PS所在的安装盘.下面让偶手把手地说一下该怎么建立一个CmdLet吧:&lt;/p&gt; &lt;p&gt;1.打开VS2005,创建一个windows的运行库.&lt;/p&gt; &lt;p&gt;2.添加引用:C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll&lt;/p&gt; &lt;p&gt;3.新建一个类文件,同时&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;using System.Management.Automation;&lt;br&gt;using System.ComponentModel;(这个在安装时会用到)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;4.下面开始写代码了:&lt;/p&gt;&lt;font color="#76c592"&gt;//先来完成cmdlet的实体类&lt;/font&gt;&amp;nbsp;&lt;br&gt; &lt;p&gt;[Cmdlet(VerbsCommon.Get, "HelloWorld")] &lt;font color="#79dfb7"&gt;//大胆地猜测一下,PS在加载cmdlet程序集的时候,是用反射的方式来识别的,反射的时候就是靠这个attribute来实现,这里面有两个参数,第一个是动作,后一个是名字.这是cmdlet的命名方式:动词+名词&lt;/font&gt;&lt;br&gt;public class ExecuteShell : Cmdlet &lt;font color="#76c592"&gt;// 继承自cmdlet的基类&lt;br&gt;&lt;/font&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string argus;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(Position = 0)]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#76c592"&gt;//大家可以发现很有意思在这里面,随处都可以看到attribute,这里指写了第一个参数,直接就反射到类对应的属性上了.&lt;/font&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ValidateNotNullOrEmpty]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Args&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return argus; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { argus = value; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void ProcessRecord()&lt;/p&gt;&lt;font color="#76c592"&gt;//处理请求,我们我这里只是简单地输出一下信息.&lt;/font&gt;&amp;nbsp;&lt;br&gt; &lt;p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argus != null &amp;amp;&amp;amp; argus.Length &amp;gt; 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteCommandDetail("Hello World:" + argus);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;} &lt;p&gt;&lt;font color="#76c592"&gt;//再来看看cmdlet的安装类&lt;/font&gt;&lt;/p&gt; &lt;p&gt;[RunInstaller(true)] &lt;font color="#76c592"&gt;//又是这种attribute&lt;/font&gt;&lt;/p&gt; &lt;p&gt;public class HelloWordSnapIn: PSSnapIn &lt;br&gt;{&lt;br&gt;&lt;font color="#76c592"&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; /// Create an instance of the GetProcPSSnapIn01&lt;br&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public PSclient()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : base()&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&lt;font color="#76c592"&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; /// Get a name for this PowerShell snap-in. This name will be used in registering&lt;br&gt;&amp;nbsp;&amp;nbsp; /// this PowerShell snap-in.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#76c592"&gt;&amp;nbsp;&amp;nbsp; /// 注意这里面的名字最为重要在下面将要讲到&lt;br&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; public override string Name&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "HelloWordSnapIn";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p&gt;&lt;font color="#76c592"&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; /// Vendor information for this PowerShell snap-in.&lt;br&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp; public override string Vendor&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "BrainIron";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&lt;font color="#76c592"&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; /// Gets resource information for vendor. This is a string of format: &lt;br&gt;&amp;nbsp;&amp;nbsp; /// resourceBaseName,resourceName. &lt;br&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; public override string VendorResource&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "HelloWordSnapIn,BrainIron";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&lt;font color="#76c592"&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; /// Description of this PowerShell snap-in.&lt;br&gt;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; public override string Description&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "This is a PowerShell snap-in that includes the Get-HelloWorld cmdlet. this is a demo, design by Brian";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;} &lt;p&gt;编译生成:HelloWorldCmdLet.dll&lt;/p&gt; &lt;p&gt;6.这时候该安装了:使用Installutil.exe HelloWorldCmdLet.dll来把安装它.Installutil.exe如果你找不到,那么应该在SDK的BIN目录里面肯定可以找得到.&lt;/p&gt; &lt;p&gt;7.这时候打开PS,使用Get-HelloWorld 命令会发现提示不支持这个命令.这时候要用:Add-PSSnapin&amp;nbsp; HelloWordSnapIn 来把它注册到PS的控制台中,这个命令的后面的那个名字就是我上面说的重要的名字,而不是类名.然后再用Get-HelloWorld 命令就可以看到成果了.&lt;/p&gt; &lt;p&gt;8.调试.因为程序要先注册到PS中,PS才能调用,所以好像不太好调试,其实可以用附加到进程的方式来调试.&lt;/p&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/9483.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>PowerShell的开发初步</title><link>http://webuc.net/chinahuman/archive/2007/09/14/9469.aspx</link><pubDate>Fri, 14 Sep 2007 05:33:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2007/09/14/9469.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/9469.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2007/09/14/9469.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/9469.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/9469.aspx</trackback:ping><description>&lt;P&gt;PowerShell是微软最新推出的基于脚本的管理工具,用脚本管理的好处就是便于写批处理命令.相象一下大的IT公司里面要把数千台的服务器上的没有响应的IIS重启一下,那是一种多么大的工作量,有了PowerShell后,那就显得轻松很多了,先一个命令查出哪台没有响应了,再发送重启命令,一切都可以自动化地完成.同时容易适应不断变化着的意外情况可以轻松地调整脚本.&lt;/P&gt;
&lt;P&gt;因为工作需要,开始学习和使用PoswerShell来做应用开发.目标是把当前的一些功能封装成cmdlet(command-let小命令),同时研究如何在C#里面去调用cmdlet.先看看资源:&lt;/P&gt;
&lt;P&gt;PowerShell的下载地址:&lt;A title=http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx"&gt;http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;请注意你当前的系统以及CPU类型选择下载.&lt;/P&gt;
&lt;P&gt;微软的PowerShell官方BLOG:&lt;A title=http://blogs.msdn.com/powershell/ href="http://blogs.msdn.com/powershell/"&gt;http://blogs.msdn.com/powershell/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;MSDN中的相应说明:&lt;A title=http://msdn2.microsoft.com/en-us/library/aa139691.aspx href="http://msdn2.microsoft.com/en-us/library/aa139691.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa139691.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;开发的时候,需要PowerShell的SDK,可以从这里下载(现在只有for vista的):&lt;A title=http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&amp;amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&amp;amp;displaylang=en&lt;/A&gt;&amp;nbsp;(SDK又是那种先下个小文件再下大文件的那种,比较郁闷)&lt;/P&gt;
&lt;P&gt;再看一眼传说中的PowerShell,和原来的CMD很像:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://webuc.net/images/webuc_net/chinahuman/484/o_WindowsLiveWriter_PowerShell_C7BC_image.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=153 alt=image src="/images/webuc_net/chinahuman/484/o_WindowsLiveWriter_PowerShell_C7BC_image_thumb.png" width=240 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;输入help就可以看到所有的命令,包含CMD的命令和一些cmdlet,不过就这些就够我们翻一会儿了.&lt;/P&gt;
&lt;P&gt;先写到这里,其它的在下面的日子里,会渐渐地写完.&lt;/P&gt;&lt;img src ="http://webuc.net/chinahuman/aggbug/9469.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>铁匠</dc:creator><title>Opera的Onload竟然会执行多次</title><link>http://webuc.net/chinahuman/archive/2007/08/15/9279.aspx</link><pubDate>Wed, 15 Aug 2007 13:59:00 GMT</pubDate><guid>http://webuc.net/chinahuman/archive/2007/08/15/9279.aspx</guid><wfw:comment>http://webuc.net/chinahuman/comments/9279.aspx</wfw:comment><comments>http://webuc.net/chinahuman/archive/2007/08/15/9279.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://webuc.net/chinahuman/comments/commentRss/9279.aspx</wfw:commentRss><trackback:ping>http://webuc.net/chinahuman/services/trackbacks/9279.aspx</trackback:ping><description>&lt;p&gt;昨天测试的MM发现网页在Opera表现都好,可是就是有一个图片没有显示出来,偶只好装了一下Opera,结果发现果真如此,而且有时候显示,有时候不显示,极其诡异.&lt;/p&gt; &lt;p&gt;今天查看了一下系统的Exception表,结果发现一堆的404错误,再看,地址,我晕,这不是要显示的图片吗?只是地址上多了好长的一个"_"号,同时显示浏览器的版本是Opera,于是打开代码来调试:&lt;/p&gt; &lt;p&gt;function InitNavBar()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var img;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!currentImg)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentImg = "";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i = 0; i &amp;lt; 4; i ++)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; img = document.getElementById(navImages[i]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (navImages[i] == currentImg)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; img.src = img.src.replace(".gif", "_.gif");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; img.onmouseover = ImageMouseOver; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; img.onmouseout = ImageMouseOut; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inited = true;&lt;br&gt;}&lt;br&gt;AddEvent(window, "load", InitNavBar); &lt;p&gt;经过Alert法调试,发现&lt;/p&gt;img.src = img.src.replace(".gif", "_.gif");&lt;br&gt;这行被调用了十几二十次,难怪会生成那么长的地址.同时,再跟踪一下,竟然发现InitNavBar()这个方法被调了十几二十次,GOOGLE一下,也没有发现哪里说Opera的Onload事件会被触发多次.于是只好加上一个开关变量,判断如果被执行过了,就直接跳出.&lt;img src ="http://webuc.net/chinahuman/aggbug/9279.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>