﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>BlogJava-写程序，做产品，过日子-随笔分类-Microsoft</title><link>http://www.blogjava.net/welkinhu/category/16994.html</link><description>Write what I like</description><language>zh-cn</language><lastBuildDate>Sat, 01 Mar 2008 15:38:48 GMT</lastBuildDate><pubDate>Sat, 01 Mar 2008 15:38:48 GMT</pubDate><ttl>60</ttl><item><title>开源项目托管站点SourceForge, Google Code, CodePlex</title><link>http://www.blogjava.net/welkinhu/archive/2008/02/27/182406.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Wed, 27 Feb 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2008/02/27/182406.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/182406.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2008/02/27/182406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/182406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/182406.html</trackback:ping><description><![CDATA[<p>近来根据公司要求，学习Microsoft.Net。于是仿照EyeLoveU，写了一个C#的小程序。现在比较稳定了，就想放到在SoruceForge这样的网站上去秀一秀。<br />
<br />
最开始考虑的自然是SourceForge。但在公司需要通过Proxy访问sourceforge.net时，速度奇慢。<br />
<br />
第二个考虑的是Google Code。无论在家通过ADSL访问，还是在公司通过Proxy访问，速度都可以接受。最好用的是支持对Issue, Discussion, Document等自定义属性标签，如priority, type, milestone等。<br />
<br />
无论是SourceForge，还是Google Code，与subversion和eclipse的集成都非常好。可是我用的是Microsoft Visual Studio 2008和C#，与这两个东家都不合拍：<br />
</p>
<ul>
    <li>&nbsp;Subversion 与VS2008的集成需要购买Visual SVN</li>
    <li>VS2008不能发布下载包到SourceForge和Google Code上。</li>
</ul>
<p>最后我发现CodePlex这个网站，居然提供Visual Studio Team Fundation Server的服务。与我用的VS2008完全是一家！可惜的是它的网速非常不稳定，很难访问。估计服务器只在美国。最要命的是，在公司的Proxy环境下，我可以从IE访问CodePlex的VSTS服务器，但VS2008的Team Explorer怎么也访问不了。</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/182406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2008-02-27 10:20 <a href="http://www.blogjava.net/welkinhu/archive/2008/02/27/182406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴：Windows XP中Administrator账户使用方法</title><link>http://www.blogjava.net/welkinhu/archive/2007/08/31/141716.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Fri, 31 Aug 2007 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2007/08/31/141716.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/141716.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2007/08/31/141716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/141716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/141716.html</trackback:ping><description><![CDATA[<p>转贴自：<a href="http://news.newhua.com/Html/System_win/2004-9/8/16...">http://news.newhua.com/Html/System_win/2004-9/8/16...</a></p> <p><strong></strong>&nbsp;</p> <p>安装Windows XP时，如果设置了一个管理员账户，那么系统内置没有密码保护的Administrator管理员账户是不会出现在用户登录列表中的。虽然它身在幕后，可却拥有系统最高权限，为了方便操作及保证系统安全，可以先给它设置密码，然后再把它请到台前来。以下便介绍具体方法。  <p><strong>1.使用“传统登录提示”登录</strong>  <p>　　启动系统到欢迎屏幕时，按两次“Ctrl+Alt+Delete”组合键，在出现的登录框中输入Administrator账户的用户名和密码即可。也可以单击“开始→控制面板”，双击“用户账号”图标，在弹出的“用户账号”窗口中，单击“更改用户登录或注销的方式”，去掉“使用欢迎屏幕”前的复选框，单击“应用选项”即可在启动时直接输入Administrator账户名及密码登录。  <p><strong>2.在登录的欢迎屏幕显示Administrator账户</strong>  <p>　　单击“开始→运行”，输入regedit后回车，打开注册表编辑器，依次展开“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList”分支，将右边的Administrator的值改为1，即可让Administrator账户出现在登录的欢迎屏幕上。  <p><strong>3.自动登录到Administrator账户</strong>  <p>　　单击“开始→运行”，输入control userpasswords2后回车，在打开的“用户账户”窗口去掉“要使用本机，用户必须输入密码”前的复选框，按“应用”后，在弹出的“自动登录”窗口中输入Administrator账户密码(如图1)，按两次“确定”即可。注意：如果原来就设置了其它账户自动登录，应该先选中“要使用本机，用户必须输入密码”前的复选框，按“应用”后再去掉选中的复选框。也可以修改注册表实现自动登录，不过没有以上方法方便。  <p><img src="http://image2.sina.com.cn/IT/upload/20040908/811/1094615437/images_center/tech/upload/2004-09-08/U811DT20040908114128.jpg" border="1">  <p>　　图1  <p>　　当然，如果不需要Administrator账户，可以依次打开“开始→控制面板→管理工具→计算机管理”，在“计算机管理”窗口，展开“系统工具→本地用户和组→用户”，在“用户”右边窗口双击Administrator账户，在弹出的“属性”窗口中选中“账号已停用”前的复选框(如图2)，按“确定”即可停用Administrator账户。  <p><img src="http://image2.sina.com.cn/IT/upload/20040908/811/1094615437/images_center/tech/upload/2004-09-08/U811DT20040908114203.jpg" border="1">  <p>　　图2  <p>&nbsp;  <h2>补充材料：修改注册表来实现XP的自动登录</h2> <p>&nbsp;  <p>在进入Windows XP桌面之前，每次都会出现一个用脑登录界面，要求我们输入用户名与密码，可以加大了系统的安全性，也为多人共用一台电脑提供了方便，但如果是家用电脑，只有你一个人使用，这样每次密码，的确不有点不大方便。我们可以通过修改注册表来实现XP的自动登录。  <p>　　第1步：运行注册表编辑器，依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon ]分支，然后在右侧窗口双击“DefaultUserName”，接着输入你的登录用户名。如果没有预设的用户名称，可以在注册表编辑器的菜单栏点选“编辑→新建→字符串值(s)→DefaultUserName”来添加这个项目，注意要区分大小写字母。　　  <p>　　第2步：同样在该分支下，在注册表编辑器的右侧窗口中双击“DefaultPassword”，然后在空白栏内输入你的密码。假如未发现“DefaultPassword”一项，可按上面的步骤来新建该字符串值。　　  <p>　　第3步：接下来在右侧窗口中双击“AutoAdminLogon”，将数值设置为“1”。假如未发现“AutoAdminLogon”，可按上面的步骤来新建。　　  <p>　　现在关闭注册表编辑器并重新启动电脑，以后你会发现那个令人讨厌的登录对话框不见了。 </p><img src ="http://www.blogjava.net/welkinhu/aggbug/141716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2007-08-31 14:07 <a href="http://www.blogjava.net/welkinhu/archive/2007/08/31/141716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Office 2007的选项设置</title><link>http://www.blogjava.net/welkinhu/archive/2007/08/20/138044.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Mon, 20 Aug 2007 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2007/08/20/138044.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/138044.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2007/08/20/138044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/138044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/138044.html</trackback:ping><description><![CDATA[<p>Office 2007使用Ribbon代替了主菜单和工具栏。而Ribbon中没有选项设置这一栏。经过查找，发现它被挤一个很不起眼的地方。</p> <p>&nbsp;</p> <p>在Office 2007(Word等）的左上角，有一个Office图标按钮。点击它就会弹出一个菜单窗口，里面包含着Ribbon上没有的菜单项。其中在菜单窗口的右下方，有一个"Word Options"的按钮，这个就是选项设置的菜单了。</p> <p> Outlook写邮件时，用的编辑器也是Word，但它的设置与Word的设置是独立的。必须在Outlook中打开编辑器，与Word一样设置编辑器选项。</p> <p>&nbsp;</p> <p>这里列举几个比较重要的设置例子。</p> <p>一、消除换行符。</p> <p> Word 2007中默认会显示一直回车换行符。通过点击Ribbon上Paragraph栏中的"Show/Hide Edit Marks"图标并不能消除它。打开"Word Options"窗口，选择"Display"栏，勾掉一直显示符号中的"Paragrahp Marks"项，就可以不显示回车换行符了。</p> <p>&nbsp;</p> <p>二、不让输入法随Office启动。</p> <p>如果安装了中文输入法（当然，其它语言的输入法也一样），这个输入法有可能总跟着Word/Outlook一起启动。非常烦人。要去掉这个特性，只需勾掉“Edit Options"中的最后一项“IME Control Active”。如下图所示。</p> <p>同时，还建议大家在控制面板中，把高级语言服务关掉。实际上大家常用的中文输入法只有一种，直接使用Ctrl+Space的方法最方便。根本不需要鼠标切换。</p> <p>&nbsp;</p> <p><a href="http://www.blogjava.net/images/blogjava_net/welkinhu/WindowsLiveWriter/Office2007_ACDD/0001.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="547" alt="0001" src="http://www.blogjava.net/images/blogjava_net/welkinhu/WindowsLiveWriter/Office2007_ACDD/0001_thumb.png" width="506" border="0"></a></p><img src ="http://www.blogjava.net/welkinhu/aggbug/138044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2007-08-20 09:45 <a href="http://www.blogjava.net/welkinhu/archive/2007/08/20/138044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网上邻居无法访问问题汇集（转）</title><link>http://www.blogjava.net/welkinhu/archive/2007/05/10/116599.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Thu, 10 May 2007 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2007/05/10/116599.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/116599.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2007/05/10/116599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/116599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/116599.html</trackback:ping><description><![CDATA[<h4>Windows网上邻居互访的基本条件 <br><br>1) 双方计算机打开，且设置了网络共享资源；<br>2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务；<br>3) 双方都正确设置了网内IP地址，且必须在一个网段中；</h4>
<h4>4) 双方的计算机中都关闭了防火墙，或者防火墙策略中没有阻止网上邻居访问的策略。<br><br><br><br>Windows 98/2000/XP/2003访问XP的用户验证问题<br><br><br><br>首先关于启用Guest为什么不能访问的问题：<br><br><br><br>1、默认情况下，XP 禁用Guest帐户<br><br><br><br>2、默认情况下，XP的本地安全策略禁止Guest用户从网络访问<br><br><br><br>3、默认情况下，XP的 本地安全策略 -&gt; 安全选项 里，"账户：使用空密码用户只能进行控制台登录"是启用的，也就是说，空密码的任何账户都不能从网络访问只能本地登录，Guest默认空密码......<br><br><br><br>所以，如果需要使用Guest用户访问XP的话，要进行上面的三个设置：启用Guest、修改安全策略允许Guest从网络访问、禁用3里面的安全策略或者给Guest加个密码。 <br><br><br><br>有时还会遇到另外一种情况：访问XP的时候，登录对话框中的用户名是灰的，始终是Guest用户，不能输入别的用户帐号。<br><br><br><br>原因是这个安全策略在作怪（管理工具 -&gt; 本地安全策略 -&gt; 安全选项 -&gt; "网络访问：本地帐户的共享和安全模式"）。默认情况下，XP的访问方式是"仅来宾"的方式，那么你访问它，当然就固定为Guest不能输入其他用户帐号了。<br><br><br><br>所以，访问XP最简单的方法就是：不用启用Guest，仅修改上面的安全策略为"经典"就行了。别的系统访问XP就可以自己输入帐户信息。<br><br><br><br>至于访问2003，默认情况下2003禁用Guest，但是没有 XP 那个讨厌的默认自相矛盾的来宾方式共享，所以可以直接输入用户名密码访问。<br><br><br><br>一个小型办公局域网，都是winxp系统，都能上外网，也能看到对方计算机，却不能看到对方共享的计算机提示网络路径不正确，或你没有权限使用网络大概就是这个意思 我记的不太清楚！！来宾帐户我也启用了！winxp的防火墙也是关闭的，ip地址也没什么问题！！<br><br><br><br>原因：Win2000/XP中存在安全策略限制。<br><br><br><br>有时，Win2000/XP"聪明"过了头，虽然我们已经启用了Guest账户，从Win98中却仍然无法访问Win2000/XP，比如使用了类似瑞星等的防火墙漏洞修补，它会修改"拒绝从网络访问这台计算机"的策略，按下面的方法修改回来：<br><br><br><br>开始 -&gt; 运行 -&gt; gpedit.msc -&gt; 计算机配置 -&gt; windows设置 -&gt; 本地策略 -&gt; 用户权利分配 -&gt; 删除"拒绝从网络访问这台计算机"中的guest用户。<br><br><br><br>Win2000/XP与Win98互访<br><br><br><br>如果两台电脑都使用Win2000/XP操作系统，那么组建局域网是一件非常简单轻松的事情，当硬件连接完成后，正常情况下立即可以在"网上邻居"中看到对方。但如果局域网中有一台电脑使用Win98，那情况可就不一定了，我们经常会发觉虽然Ping命令可以通过，但仍然无法在"网上邻居"中实现互访，这时该怎么办呢？ <br><br><br><br><br>对策一：在Win2000/XP中启用Guest用户。在Win2000/XP系统安装之后会缺省建立两个用户账户，即Administrator（系统管理员）和Guest（来宾账户），所有在本地计算机没有被分配到账户的用户都将默认使用Guest账户，该账户是没有密码的。不过，在缺省设置下，这个Guest账户并未被启用，我们可以从"控制面板|管理工具|计算机管理|本地用户和组|用户"中找到 "Guest"账户，并用鼠标右击打开"Guest属性"对话框，去除这里的"账户已停用"复选框上的对钩标记，这样退出后就可以从Win98中访问到 Win2000/XP了。<br><br><br><br>其实，启用了Guest账户后，最大的好处是从Win98访问Win2000/XP时就不需要输入用户名和密码了，这种方法比较适合于用户不确定、访问量较大的局域网，但对家庭用户来说并不适用。 <br><br><br><br>对策二：检查Win2000/XP中是否存在安全策略限制。有时，Win2000/XP"聪明"过了头，虽然我们已经启用了Guest账户，从 Win98中却仍然无法访问Win2000/XP，这时就要从"控制面板|管理工具|本地安全策略|本地策略|用户权利指派"中找到"从网络访问此计算机 "或者"拒绝从网络访问这台计算机"，然后检查一下其中是否出现了Guest账户或者其他对应的账户，然后根据不同情况进行添加或者删除即可。<br><br><br><br>对策三：停用本地连接上的防火墙。防火墙是充当网络与外部世界之间的保卫边界的安全系统，微软在WinXP中为用户提供了一个内置的Internet连接防火墙（ICF），启用后可以限制某些不安全信息从外部进入内部网络。不过，如果您是在本地连接上启用了这个防火墙，那么就会造成工作组之间无法互访，出现"XXX无法访问"、"您可能没有权限使用网络资源"、"请与这台服务器的管理员联系以查明您是否有访问权限"、"找不到网络路径"等类似的提示，此时请停用本地连接的防火墙屏蔽。<br><br><br><br>对策四：为WinXP添加NetBEUI协议。其实，直接添加NetBEUI协议对于解决不能互访的问题有时反而更为简单一些，而且它可以解决上面提到的启用防火墙的问题。Win98安装时会自动安装NetBEUI协议，但由于WinXP已经不再提供对NetBEUI协议的技术支持，因此只能手工添加了。<br><br><br><br>找出WinXP安装光盘，进入"valueadd\Msft\Net\ Netbeui"文件夹下，这里有Nbf.sys、Netbeui.txt、Netnbf.inf共3个文件，先将Nbf.sys文件复制到本机的 "Windows\System32\Drivers"文件夹下（这里的本机指安装了WinXP的那台电脑），再将Netnbf.inf文件复制到本机的 "Windows\INF"文件夹下，Netbeui.txt文件可有可无。不过， INF文件夹具有隐藏属性，用户需要先在WinXP下的"工具|属性"窗口中选择显示文件才可以看到该目录。<br><br><br><br>对策五：启用 Win98中的"文件及打印机共享"。这是一个很简单但却经常被人忽略的问题，就是装有Win2000/XP的机器虽然可以从"网上邻居"中发现装有 Win98的机器，但却无法访问，这是因为Win98未启用"允许其他用户访问我的文件"而造成的，启用该选项就可以解决这个问题。<br><br><br><br>当然，除了上面提到的各种原因外，还有两台电脑不处于同一工作组中，或者是两台电脑的内部IP地址发生了冲突，甚至包括Hub故障、线路故障等。</h4>
<img src ="http://www.blogjava.net/welkinhu/aggbug/116599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2007-05-10 21:48 <a href="http://www.blogjava.net/welkinhu/archive/2007/05/10/116599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非凡的Altova StyleVision，同源输出HTML，PDF，RTF。</title><link>http://www.blogjava.net/welkinhu/archive/2006/12/30/90983.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Sat, 30 Dec 2006 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/12/30/90983.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/90983.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/12/30/90983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/90983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/90983.html</trackback:ping><description><![CDATA[
		<p>如今的XML，在文档生成方面可谓大红大紫。使用XML + XSLT可以动态生成HTML文档和表单。而XML + XSL + FO更可以动态生成PDF/RTF文档。</p>
		<p>所谓动态生成，就是在运行，才将数据放到具有指定DTD/schema的XML文档中，使用预定义的XSL文档生成可供浏览或打印的文档。</p>
		<p>一般来说，生成HTML和PDF的XSLT要分别定义。对于HTML和PDF表现差别较大的文档，有必要使用这种方法。</p>
		<p>但是，对于一些格式要求较高的表单和报表，在HTML和PDF下的表现是基本一致的。这个时候就有必要用同一个样式表输出HTML和PDF。要知道，手工定义一份XSLT可是很费工夫的。</p>
		<p>FO似乎能达到这个目标，它具备足够精细的样式定义，借助FOP等工具，可直接输出PDF等格式。可惜的是，目前的主流浏览器，如IE和firefox，并不能直接显示FO文档。必须将其转换成HTML或XHTML。然后，我没有发现任何的开源工具可以做到这一点。</p>
		<p> </p>
		<p>Altove StyleVision，恰到好处的实现上述目标。</p>
		<p>顾名思义，StyleVision就是用来设计样式表的，它提供一个非常友好的GUI设计界面。它使用一个私有的XML格式(SPS)来保存样式表，这个样式表可转换成生成HTML的XSLT和生成FO的XSLT。</p>
		<p>这样，做为开发方，购买一份Altova StyleVision，用来设计样式表，然后将其生成的XSLT发布给用户，就可以实现同源输出报表了。而最终用户可以不购买Altova StyleVision</p>
		<p>附图：两种动态文档生成方案(在图中体现为两条可选的路线):</p>
		<p> </p>
		<p>
				<a href="/images/blogjava_net/welkinhu/WindowsLiveWriter/AltovaStyleVisionHTMLPDFRTF_AEAA/image%7B0%7D%5B5%5D.png" atomicselection="true">
						<img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="532" src="http://www.blogjava.net/images/blogjava_net/welkinhu/WindowsLiveWriter/AltovaStyleVisionHTMLPDFRTF_AEAA/image%7B0%7D_thumb%5B3%5D.png" width="526" border="0" />
				</a>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/90983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-12-30 12:26 <a href="http://www.blogjava.net/welkinhu/archive/2006/12/30/90983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何设计数据库表实现完整的RBAC(基于角色权限控制)</title><link>http://www.blogjava.net/welkinhu/archive/2006/12/27/90345.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Wed, 27 Dec 2006 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/12/27/90345.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/90345.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/12/27/90345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/90345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/90345.html</trackback:ping><description><![CDATA[<p>RBAC(基于角色的权限控制)是一个老话题了，但是这两天我试图设计一套表结构实现完整的RBAC时，发现存在很多困难。</p> <p>我说的完整的RBAC，是指支持角色树形结构和角色分组。具体来说，应当包含如下权限控制需求：</p> <ol> <li>父级角色可以访问甚至是修改其子级的数据，包含直接子级直到最终子级。  <li>角色可以访问其所在组的数据。  <li>父级角色可以访问其所有子级(从直接子级到最终子级)所在组的数据。</li></ol> <p>而具体到我的系统中，还应当有如下需求。</p> <ol> <li>兼容多种数据库产品。只能用简单的表，视图，存储过程和函数等实现。  <li>同时兼容单条数据处理和批量数据处理的需求。</li></ol> <p>且不论这些具体需求，RBAC的基本表应当如下四个：</p> <ul> <li>roleList表，记录所有的角色和角色组。  <ul> <li>roleId: PK,&nbsp;角色/组的ID，全局唯一，不区分角色和组。  <li>roleName:角色/组的名称。  <li>roleType: R - 角色，G - 组</li></ul> <li>rolePermission表，记录每一个角色/组对每一个对象的权限。  <ul> <li>permissionID: PK, 无特定意义。  <li>role: 角色/组的ID。  <li>object: 对象的ID。  <li>permission: 权限标识，如读，写，删等。</li></ul> <li>roleRelationship表，记录角色/组之间的关系。  <ul> <li>relationId: PK, 无特定意义。  <li>superiorRole: 父角色/组的ID。  <li>role:子角色，子组，成员角色，成员组的ID。  <li>relationship: 关系标识，可在如下设置集中选取一个。  <ul> <li>PG标识：P - 父子关系，G - 组/成员关系。  <li>PPGG标识：在PG集上，再加三种：PP - 间接父级关系，GG - 组内组关系，CG - parentRole是组，childRole的子角色或间接子角色是其成员，或其子组(含间接子组）的成员</li></ul></li></ul> <li>objectList表，记录所有的对象。  <ul> <li>objectId: PK，对象ID，全局唯一。  <li>objectName: 对象名称。  <li>... ...</li></ul></li></ul> <p>&nbsp;</p> <p>分析上述表结构，不难发现，问题的关键在于从rolePermission表中读取数据时，如何限定角色/组的范围.</p> <p>方案一</p> <p>如果角色和组的总量不大，比如在100以内，采用PPGG标识关系，读取数据时是最快的。这个时候的SQL只需要一个输入参数?roleId：</p> <p>SELECT object FROM rolePermission p left join roleRelationship r&nbsp;on p.role = r.role&nbsp;WHERE&nbsp; p.role = ?roleId or r.superiorRole = ?roleId. (尚未验证SQL的正确性)</p> <p>但是，这个方案是以极度冗余roleRelationship表的数据为代价的，比如有100个角色，那么roleRelationship中将会有100 * 100 ＝10,000条记录。而在每次调整角色和R角色组的时候，就要在roleRelationship中一次增加或删除100条记录。这个开销是比较大的。</p> <p>方案二</p> <p>只标识PG，查询时接收的输入参数为一个完整的相关角色列表?roleList。</p> <p>SELECT object FROM rolePermission WHERE role in (?roleList)</p> <p>在系统运行时，这个?roleList通常可以从role hierarchy cache中取到，比较方便。这个方案的主要问题有二：</p> <p>1）如果?roleList过长，使用in判断性能会很差。</p> <p>2）在有些情况下，如报表查询和系统外查询时，取得roleList不太方便。</p> <p>方案三</p> <p>只标识PG，但使用如下三个数据库函数来判断角色/组之间的关系。</p> <ul> <li>boolean isChild(role, parentRole) - 如role为parentRole的子，返回true。  <li>boolean isDescendant(role, ancestorRole) - 如role为ancestorRole的子或间接子级，返回true。  <li>boolean isMember(role, group) - 如role为group的成员或子组的成员，返回true。  <li>boolean descendantIsMember(role, group) - 如role的子或间接子级为group的成员，返回true。  <li>boolean isBelong(role, super) - 如role为super的子，间接子，成员或间接员，或者role的子(含间接子)是super的成员或子组成员，返回true。</li></ul> <p>在查询时，也只需要接收一个?roleId：SELECT object FROM rolePemission WHERE isBelong(?roleId, role)</p> <p>如何写出高性能的数据库函数是实现这个方法的关键。</p> <p>&nbsp;</p> <p>上述方法仅是理论分析，我倾向于方案二。</p> <p>&nbsp;</p> <p>终于想到新的方案了。</p> <p>方案四，</p> <p>结合方案一和方案二，在roleRelationship中，对前两级(也可以是三级或四级)角色，保存其所有的下级角色和组。这样，如果以前两级角色查询数据，就使用方案一，如果以第三级及以下的角色查询数据，就使用方案二。</p> <p>仍以100个角色为例，每个角色要保存三个关系：一级主管角色，二级主管角色，直接主管角色，最多有300条数据。</p> <p>每往角色组中加一个角色，也需要加入三条数据：角色本身，一级主管角色，二级主管角色。</p> <p>但往角色组中加一个子组，需要加入的数据量就大一些：子组本身，子组所有角色，子组所有角色的一级主管角色和二级主管角色。如在多个子组中发现同一角色，可重复保存，但应在表中附加说明是由哪个子组导入的。这样在删除子组时就可以有选择性的删除。</p> <p>但重复子组的情况就比较麻烦，还有等考虑。假充有组g01,g11,g12,g21。g01包含g11和g12，g11和g12分别包含g21。从g01中删除g11时，如何判断g21的去留?看来还是应当在维护时判断应不应当删除。</p><img src ="http://www.blogjava.net/welkinhu/aggbug/90345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-12-27 17:12 <a href="http://www.blogjava.net/welkinhu/archive/2006/12/27/90345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UUID and GUID</title><link>http://www.blogjava.net/welkinhu/archive/2006/12/26/90137.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Tue, 26 Dec 2006 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/12/26/90137.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/90137.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/12/26/90137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/90137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/90137.html</trackback:ping><description><![CDATA[
		<p>
				<a href="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1406125">http://tb.blog.csdn.net/TrackBack.aspx?PostId=1406125</a>
		</p>
		<p>原来GUID只是UUID的一种实现。</p>
		<p>原来UUID虽长，做数据库主键不但不会影响性能，反而对性能有所帮助。</p>
		<p>有时间我实际测试一下。</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/90137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-12-26 16:59 <a href="http://www.blogjava.net/welkinhu/archive/2006/12/26/90137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Outlook　2003的一些设置技巧</title><link>http://www.blogjava.net/welkinhu/archive/2006/12/05/85643.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Tue, 05 Dec 2006 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/12/05/85643.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/85643.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/12/05/85643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/85643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/85643.html</trackback:ping><description><![CDATA[
		<p>
				<br />
		</p>
		<p>
				<br />
		</p>
		<p>Outlook 2003中文版中，设置邮件回复为英文的"re"，而不是中文的"回复"<br />工具-&gt;选项-&gt;邮件格式-&gt;国际选项</p>
		<p>office 2003中去掉烦人的加载项工具栏<br />安装Acrobat 后，所有的Office工具都会多出单独的一行PDF工具栏，很烦人。<br />在注册表中找到相应的Addin，把LoadBehavior键值改为9就可以去掉它了。<br />LoadBehavior 指示加载行为的整数：0（无）、3（启动）、9（按需装载）或 16（只在下次启动时装载）</p>
		<p>所有Office 2003软件注的addin注册在：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office</p>
		<p>如:</p>
		<p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Access\Addins\PDFMaker.OfficeAddin</p>
		<p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins\PDFMaker.OfficeAddin</p>
		<p>一些Outlook网址</p>
		<p>
				<a href="http://www.outlookcode.com/d/launchform.htm">http://www.outlookcode.com/d/launchform.htm</a>
				<br />
				<a href="http://www.outlookcode.com/d/forms/formlauncher.htm">http://www.outlookcode.com/d/forms/formlauncher.htm</a>
				<br />
				<a href="http://support.microsoft.com/?kbid=249199">http://support.microsoft.com/?kbid=249199</a>
				<br />
				<a href="http://www.outlookcode.com/d/code/getfolder.htm">http://www.outlookcode.com/d/code/getfolder.htm</a>
		</p>
		<p>Office Outlook会自动读取Outlook Express的地址本，读取位置如下：<br />D:\Documents and Settings\Administrator\Application Data\Microsoft\Address Book\Administrator.wab</p>
		<p class="zoundry_bw_tags">
				<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
				<span class="ztags">
						<span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/Microsoft" rel="tag">Microsoft</a>, <a class="ztag" href="http://technorati.com/tag/Office" rel="tag">Office</a>, <a class="ztag" href="http://technorati.com/tag/Outlook" rel="tag">Outlook</a></span>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/85643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-12-05 18:04 <a href="http://www.blogjava.net/welkinhu/archive/2006/12/05/85643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让Windows 2000/XP系统自动登陆</title><link>http://www.blogjava.net/welkinhu/archive/2006/12/05/85642.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Tue, 05 Dec 2006 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/12/05/85642.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/85642.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/12/05/85642.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/85642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/85642.html</trackback:ping><description><![CDATA[
		<p>一、设置缺省的用户名</p>
		<p>在"运行"对话框中输入"regedt32.exe"，打开注册表编辑器。选择窗口菜单项中的"HKEY_LOCAL_MACHINE"窗口，在左边的目录树中找到"SOFTWARE＼Microsoft＼WindowsNT＼CurrentVersion＼Winlogon"子项，单击后在右边窗口中找到"DefaultUserName"条目，双击后更改为你希望系统自动登录时使用的用户名称(前提是这个用户必须存在)。</p>
		<p>二、设置缺省的用户口令</p>
		<p>同样在右边的窗口中找到"DefaultPassword"条目，双击更改为DefaultUserName中的用户使用的口令(如果"DefaultPassword"条目不存在，就需要选择"编辑→添加值"创建该条目)。</p>
		<p>设置完成缺省用户口令后，就可以设置自动登录了。在"SOFTWARE＼Microsoft＼WindowsNT＼CurrentVersion＼Winlogon"子项中，找到"AutoAdminLogon"条目，双击更改该值为1时，系统使用缺省的用户名和密码自动登录；该值为0时，需要用户手工登录</p>
		<br />
		<p class="zoundry_bw_tags">
				<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
				<span class="ztags">
						<span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/Microsoft" rel="tag">Microsoft</a>, <a class="ztag" href="http://technorati.com/tag/Windows" rel="tag">Windows</a></span>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/85642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-12-05 18:03 <a href="http://www.blogjava.net/welkinhu/archive/2006/12/05/85642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令行中使用VSS (转贴)</title><link>http://www.blogjava.net/welkinhu/archive/2006/12/05/85641.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Tue, 05 Dec 2006 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/12/05/85641.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/85641.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/12/05/85641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/85641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/85641.html</trackback:ping><description><![CDATA[
		<p>最近工作需要将三四百个DLL文件汇入到VSS数据库中，并且一个个打上Label号，label号取的DLL的版本号（就是选中，点击鼠标邮件，属性里面可以看到的版本号），初步算了一下，这样几百个文件，一个Check out/Check in,再找到Label号，打上Label号，少说也要花上一两天的时间，这样实在是太慢了。下午希望能够通过在DotNet中编程来操作VSS数据库，于是查帮助文档，没有看到相关资料，倒是看到说VSS有命令行可以使用。于是网上搜了一下，也没看到几篇介绍VSS命令行的文章，还是看帮助文档吧，看了一个下午，一个晚上。再结合C＃或者C/C＋＋的使用，基本上以后可以实现自动Check Out/Check In并且自动打Label号了。简单总结了一下，下面是VSS的一些常用命令和操作：<br /><br />1.setup environment variable: //指向ss.exe所在的路径<br />path=%path%;C:\Program Files\Microsoft Visual Studio\VSS\win32<br /><br />2.指向VSS数据库的所在目录<br />set SSDIR=\\gqa-eric-lv\VSS\<br />set SSDIR=\\Guruvss\erp$\<br /><br />3.登陆VSS：<br />ss CP -Yeric,eric123 -I- -s\\gqa-eric-lv\vss<br /><br />4.获取任一目录的任一文件到本机(下例将$/ASP.Net/DataGridTest/index.aspx文件get到D:\tmp目录)<br />ss get -GLD:\tmp $/ASP.Net/DataGridTest/index.aspx<br />(ss get, -GLpath Copies a file to the specified folder, not to the current or working folder. )<br /><br />5.分屏显示目录ASP.Net中的所有文件和文件夹（包括子文件):<br />ss dir $/ASP.Net -R|more (另外，有-I -V 两个参数，作用未知)<br /><br />6.set Current Project:<br />ss cp $/SQL-sample<br /><br />7.vss命令行是大小写不敏感的；命令行中的命令不需要全名，同sql一样，只要是可以识别的名字及可,如Dir就是directory的缩写；<br />(遵守UNC通用命名规则，Universal Naming Convention)<br /><br />8.一些通用的命令行选项：<br />-C 为指定项(可以是多项)做注释 (Dir例外)<br />-O 重定向命令<br />-V 操作某项的指定版本<br />-R Perform a command recursively.<br />-S Turn SmartMode on or off for the command.<br />-G Change the way the Get command works on any file retrieved to the local drive.<br />-W 指明本机副本是否只读（使用此参数，表示writable)<br />-N 在长短文件名两种模式间切换<br />-I 任何环境下都不提示输入<br />-Y 指定用户名和密码<br />-?, -H 两个参数的作用都是获得在线的帮助<br /><br />9.命令中有空格时，用双引号括起整个选项，如用ss CP "-Yeric Lv",eric123 而不用ss CP -Y"eric lv",eric123，<br /><br />10.启动图形界面：ssexp -s\\gqa-eric-lv\vss<br /><br />11.ss命令中，/表示VSS的当前目录，$/表示根目录,常用操作命令如下:<br />ss Add TEST.C "My long filename.H" ，把TEST.C和"My long filename.H"两个文件添加到当前项目；<br />ss Add -R *，把当前目录的所有文件及文件夹（包括子文件夹、文件）添加到当前项目；<br />ss ADD -D- *.DLL,添加当前目录的所有DLL文件到当前项目，但不保留VSS上的历史文件（以节省空间）；<br />ss Checkout TEST.C TEST.H Checkout当前项目中的两个文件<br />ss Checkout $/TESTDATA/TEST.C Checkout指定项目中的文件<br />ss Checkout -R $/TESTDATA 循环Check项目$/TESTDATA<br />ss Comment TEST.C -V5 改变TEST.C的版本号为5的版本注释<br />ss Comment TEST.C 改变TEST.C的最新版本的注释<br />ss Comment $/TESTDATA 改变项目$/TESTDATA的注释<br />ss Create $/WORD VSS的根目录下，创建项目WORD<br />ss Create WORD VSS的当前目录下，创建项目WORD<br />ss Cp $/WORD 设置$/WORD为Current Project<br />ss Cp .. 跳转到当前项目的父项目<br />ss Delete $/PRJ/TEST.C 删除文件TEST.C (delete命令删除的文件，可以用直接add命令回复,如Add test.C)<br />ss Delete $/PRJ 删除项目 (不可以有两个同名的文件被delete，因为没有真正删除)<br />ss -S Delete *.* 删除所有文件,-S表示删除VSS上的文件之后，删除本机文件<br />ss Destroy $/PRJ/TEST.C 持久删除文件(不可恢复)<br />ss Destroy $/PRJ 持久删除项目<br /><br />12.其他的更改操作有：label,merge,move,password,purge,recover,rename,rollback,share,undocheckout,workfold,branch等命令，这些命令会改变VSS数据库的内容或者环境。<br /><br />13.VSS命令行中的比较/查找/显示等不改变数据库和环境的命令： diff,dir,FileType,Get,help,history,links,paths,project,properties,status,view,whoami<br /><br />14.显示最近的Version，Label信息：SS properties<br /><br />15.显示Checkout的文件：SS Status<br /><br /><span class="ztags"><span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/Microsoft" rel="tag">Microsoft</a>, <a class="ztag" href="http://technorati.com/tag/VSS" rel="tag">VSS</a></span></p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/85641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-12-05 18:01 <a href="http://www.blogjava.net/welkinhu/archive/2006/12/05/85641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delicate points of C#</title><link>http://www.blogjava.net/welkinhu/archive/2006/11/29/84229.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Wed, 29 Nov 2006 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/11/29/84229.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/84229.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/11/29/84229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/84229.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/84229.html</trackback:ping><description><![CDATA[
<p>These days, in order to import my office contacts excel to outlook, I write a little C# program via Microsoft Visual Studio for Office.</p>
<p>My working computer language is Java. I know less about C#. I found C# really has some delicate points, especially at string process.</p>
<p>1. String.format("this is a text with two parameters: {0} and {1}", "p1", "p2"), the result is "this is a text with two parameters: p1 and p2".</p>
<p>In java, I have to write my own method to do it.</p>
<p><br/>2. String.split(delimiter,StringSplitOptions.RemoveEmptyEntries), it can weed out empty elements from result array.</p>
<br/><br/>However, I am used to use Eclipse. Microsoft Visual Studio 2005 is not a better IDE to me.
<p class="zoundry_bw_tags">
  <!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
  <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/.net" class="ztag" rel="tag">.net</a>, <a href="http://technorati.com/tag/C%23" class="ztag" rel="tag">C#</a></span> 
</p><p class="poweredbyzoundry">Powered by <a href="http://www.zoundry.com" class="poweredbyzoundry_link" rel="nofollow">Zoundry</a></p><img src ="http://www.blogjava.net/welkinhu/aggbug/84229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-11-29 09:28 <a href="http://www.blogjava.net/welkinhu/archive/2006/11/29/84229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Outlook 2003 EN can not display plain text mail clearly</title><link>http://www.blogjava.net/welkinhu/archive/2006/11/15/81211.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Wed, 15 Nov 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/11/15/81211.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/81211.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/11/15/81211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/81211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/81211.html</trackback:ping><description><![CDATA[
		<p>When reading plain text mails in outlook 2003 of notebook (LCD), the font is very blur. But the font become clear if I open it via clicking reply or forward.</p>
		<p>This problem was resolved via set reading font for plain text:</p>
		<p>Tools-&gt;Options-&gt;Mail Format: click button "Font..." in "Stationery and Fonts" section, a dialog will be popped up. Select a suitable font for "when composing and reading plain text".</p>
		<p>The default font is Courier New. I changed to other font, all plain text display clearly.</p>
		<p>Why outlook can not display Courier New clearly? I felt very strange. I open the font dialog again and set the font back to Courier New. All plain mails change to Courier New but did not blur any longer!</p>
		<p>Perhaps the problem is caused by outlook data file (PST) migration. the default PST is copied from desktop PC.</p>
		<p class="zoundry_bw_tags">
				<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
				<span class="ztags">
						<span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/Courier" rel="tag">Courier</a>, <a class="ztag" href="http://technorati.com/tag/outlook" rel="tag">outlook</a>, <a class="ztag" href="http://technorati.com/tag/plain%20text" rel="tag">plain text</a></span>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/81211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-11-15 12:00 <a href="http://www.blogjava.net/welkinhu/archive/2006/11/15/81211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Add "DOS Here"  to right button menu in Windows</title><link>http://www.blogjava.net/welkinhu/archive/2006/11/08/79917.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Wed, 08 Nov 2006 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/11/08/79917.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/79917.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/11/08/79917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/79917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/79917.html</trackback:ping><description><![CDATA[
		<p>"DOS Here" is a wonderful item in right button menu. Here are Windows XP/2000 registry for it.</p>
		<p>Windows Registry Editor Version 5.00</p>
		<p>[HKEY_CLASSES_ROOT\Directory\shell\cmd]<br />@="DOS Here"</p>
		<p>[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]<br />@="cmd.exe /k \"cd %L\""<br /></p>
		<p class="zoundry_bw_tags">
				<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
				<span class="ztags">
						<span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/DOS" rel="tag">DOS</a>, <a class="ztag" href="http://technorati.com/tag/Windows" rel="tag">Windows</a></span>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/79917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-11-08 17:58 <a href="http://www.blogjava.net/welkinhu/archive/2006/11/08/79917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几年前留下的VB小技巧</title><link>http://www.blogjava.net/welkinhu/archive/2006/11/06/79437.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Mon, 06 Nov 2006 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/11/06/79437.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/79437.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/11/06/79437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/79437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/79437.html</trackback:ping><description><![CDATA[
		<p>已经n年不用VB了，一直不忍删除当年的这个文本文件。</p>
		<p>--------------------------------------------------------------------------------------------</p>
		<p>表示日期值的数字符号 (#) 必须包含在字符串中，这样它们才能连接到日期值。</p>
		<p>--------------------------------------------------------------------------------------------------<br />Shell(pathname[,windowstyle])　<br />执行一个可执行文件，返回一个 Variant (Double)，如果成功的话，代表这个程序的任务 ID，若不成功，则会返回 0。</p>
		<p>------------------------------------------------------------------------------------------------<br />在DLL中的窗体要先设对象才能打开。<br />dim frm as new Form<br />frm.show vbModel: 主程序打开frm,停在此句。<br />frm.show ：主程序打开frm, 继续执行。</p>
		<p>------------------------------------------------------------------------------------------------</p>
		<p>TreeView1.SelectedItem.Index</p>
		<p>Node.FullPath ' \ \</p>
		<p>--------------------------------------------------------------------<br />*****<br />不能按如下方法定义变体参数：<br />Can not use parameter in this way:<br />Optional vSearch As Variant = Empty</p>
		<p>Replace method<br />Definde parameter: Optional vSearch As Variant<br />Definde varible: Dim var as Variant<br /><br />Transfer Value code:<br />If IsError(vSearch) Then<br />var = Empty<br />Else<br />var = vSearch<br />End If</p>
		<p>----------------------------------------------------------------------<br />****<br />键盘字符按键的键号：<br />Char keyCode in Keyboard<br />48 ~ 57 , 65 ~ 90 , 96 ~ 110 , 186 ~ 192 , 219 ~ 222</p>
		<p>VB Code:<br />If KeyCode &lt; 48 Or (KeyCode &gt; 57 And KeyCode &lt; 65) _<br />Or (KeyCode &gt; 90 And KeyCode &lt; 96) Or _<br />(KeyCode &gt; 110 And KeyCode &lt; 186) Or _<br />(KeyCode &gt; 192 And KeyCode &lt; 219) Or KeyCode &gt; 222 Then<br />Exit Function<br />End If</p>
		<p>----------------------------------------------------------------------------<br />***<br />删除有子表的表记录时要考虑子表的事务流操作。<br />oContext.SetAbort<br />oContext.SetComplete</p>
		<p>----------------------------------------------------------------------------<br />******<br />工程文件引用不当造成程序不能生成相应对象而导程序不能运行的问题<br />在同时调试多个工程文件的情况下，如有如下几个工程：<br />启动工程：SysAdmin ; 管理模块工程：　SysAdminModule ; 主工程: APSParaMaint<br />APSPrarMaint中不引用前两个工程，SysAdminModule引用APSParaMaint,　SysAdmin同时引用APSParaMaint与SysAdminModule。<br />计算机上已注册表各工程的DLL文件，且引用的工程文件是这些DLL，那么在联合三者构成工程组调试时，打开的工程源文件（VBP文件）由于没有被引用到，从而是不起作用的，程序将按DLL文件运行。应该使其所有引用工程组内工程的文件为源文件。如果有的是源文件，有的是DLL文件，就有可能出现不能生成相应对象的问题。</p>
		<p>中间层工程属性注意：<br />工程兼容性，线程,编译文件的位置。</p>
		<br />
		<p>
				<br />---------------------------------------------------------------------------<br />***<br />写SQL要时时考虑空值的处理。</p>
		<p>---------------------------------------------------------------------------------<br />****<br />在VB中获取打印机设置的方法：<br />VB内置有系统级全局变量Printer/Printers,其中存储要当前系统中的所有打印机设置情况。<br />可以使用set Printer = Printer(i)的方法来为当前程序选择打印机。<br />在Crystal Report 中，如RPT文件选中No Printer选项，要想在程序中可以打印，可按如下方法：<br />On error resume next<br />crpReport.SelectPrinter Printer.DriverName, Printer.DeviceName, Printer.Port<br />crpReport.PaperOrientation = Printer.Orientation<br />If Err.Number = 484 Then<br />MsgBox "No printer found in you system!", vbCritical<br />Err.Clear<br />GoTo ExitHere<br />End If<br />crpReport.PrintOut True</p>
		<p>由于在当前系统没有打印机设置时Printer/Printers不会被置空，其标志性属性都不可用，故只能用错误处理来判断无打印机设置时的情况。</p>
		<p>--------------------------------------------------------------------------------------<br />**********<br />delete from at_UserLogonActivity</p>
		<p>--------------------------------------------------------------------------------------<br />*********<br />数值数据校验的注意事项：<br />1，应在输入控件的Validate事件中进行校验。<br />2，校验内容由主到次为：长度（整数部分与小数部分），数值范围，可否为负，显示格式及与其它数据的大小关系。与其它数据的大小关系放在所有数据录入完成后再校验。<br />3，校验时要考虑输入数据为科学计数式的校验，如数据有长度要求，可将其格式化为浮点数显示再做校验。对于所有有数值范围的校验，由于一般控件录用入值默认为字串型，所以一定要先将其转换嵝数值型再做校验。<br />3，对于窗体上的取消按钮之类的控件，应设其CauseValidate属性为False，以便在取消操作时不做校验。<br />4，如无必要用科学计数式显示数据，就应在输入控件的LostFocus事件中使用Format函数将其显示浮点格式。</p>
		<p>-------------------------------------------------------------------------------<br />******<br />设计CrystalReport时，如选中Save Data With Report项且在设计时生成了预览数据，那么此报表将不能再直接动态生成数据，而要在使用DiscardSavedData方法清空数据后才能生成。但使用DiscardSavedData后系统将自动要求更新TTX数据源，如在报表原有路径下找不到相应的TTX文件，就会有对话框弹出要求指定文件地址。此是指出正确的文件地址或直接按取消都可以成功更新数据源。</p>
		<p>--------------------------------------------------------------------------------<br />****<br />TrueDBGrid<br />当点击TrueDBGrid的行头时，此行即被设为选中状态，此时按Del键可以删除此行。但如在TrueDBGrid尚未得到焦点是就点击其行头，TrueDBGrid只会将所选行设为选中状态，却不会同时得到焦点，因此此时如按Del将不能对TrueDBGrid起作用。建议在其Click事件中加入代码使其得到焦点。</p>
		<p>-----------------------------------------------------------------------------------<br />****<br />Fileds in Table for Table Maintenance Module<br />NeedMaint , TableName , FieldName , FieldCaption , FieldType , IsNullable , IsPK , IsIdentity , BaseTable , BaseFields , DataRange , DataFormat , BoxType<br />DataRange为字串型，可采取如下几种格式：0,1 (-99,99]<br />DataFormat：日期格式，字串大小写，数值格式等。<br />当IsIdentity为True时此字段要显示，但无论何时都不可编辑。<br />外键：组合框<br />日期时间：DTPicker<br />数值字串：文本框<br />逻辑值：0－1值：选项框<br />离散值：单选钮<br />不应出现应为外键的离散值。</p>
		<p>离散值表：<br />TableName , FieldName , Vaule , DisplayValue</p>
		<p>
				<br />---------------------------------------------------------------------------<br />*******<br />如统一使用Grid新增记录，如何处理允许一次新增多个记录？<br />有外连表的Code-Desc如何实现？<br />如外连Program_Cd，可引申出更进一步的外连表Product_Cd,如何处理？<br />如何在TreeView中显示？</p>
		<p>--------------------------------------------------------------------<br />********<br />CallByName:通过传递方法或属性名来访问函数。</p>
		<p>
				<br />--------------------------------------------------------------------<br />********<br />在FlexGrid中使用CheckBox的方法：<br />1，列表显示时只显示文本，在得到光标进行编辑时才变成CheckBox.<br />2，对所有数据单元格在列表时就入在CheckBox中。<br />3, 使用√，不加方框。</p>
		<p>涉及到Check值的处理应主要交由Field对象来做。</p>
		<p>
				<br />--------------------------------------------------------------------<br />**********<br />在不同进程间不能直接作地址参数传递。<br />即在中间层与客户端之间不能传递自定义的Class对象.</p>
		<p>--------------------------------------------------------------------<br />********<br />在新生成一个对象时，触发Class_Initialize事件。此时对象还没有生成，所以不能在此事件中出现对自身的对象引用，更不宜生成其子对象。可使用Init函数来做一些对角生成后的初始化工作。<br />-----------------------------------------------------------------------------<br />*****<br />table.Normal{width: 640pt; background-color: yellow; border-collapse: collapse;}<br />td.Normal{border: thin solid blue; padding: 5pt; margin: 5pt;}<br />使用CSS定义表格样式时，无法在Table级定义每个单元格的边框等属性，此时应按上例使用。<br />-----------------------------------------------------------------------<br />****<br />xsl:apply-templates:遍历指定的结点集（默认为当前结点的子结点集，不含孙结点），并对其依次进行模板匹配（即格式化）。</p>
		<p>-----------------------------------------------------------------------<br />****<br />&lt;xsl:for-each select="Set/Record" order-by="+ number(ID)"&gt;<br />在IE5中不能使用sort，可用此法代替。</p>
		<p class="zoundry_bw_tags">
				<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
				<span class="ztags">
						<span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/VB" rel="tag">VB</a>, <a class="ztag" href="http://technorati.com/tag/software%20tips" rel="tag">software tips</a></span>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/79437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-11-06 17:00 <a href="http://www.blogjava.net/welkinhu/archive/2006/11/06/79437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>清除dllcache的方法</title><link>http://www.blogjava.net/welkinhu/archive/2006/11/02/78616.html</link><dc:creator>Welkin Hu</dc:creator><author>Welkin Hu</author><pubDate>Thu, 02 Nov 2006 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/welkinhu/archive/2006/11/02/78616.html</guid><wfw:comment>http://www.blogjava.net/welkinhu/comments/78616.html</wfw:comment><comments>http://www.blogjava.net/welkinhu/archive/2006/11/02/78616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinhu/comments/commentRss/78616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinhu/services/trackbacks/78616.html</trackback:ping><description><![CDATA[
		<p>Windows XP系统目录下的dllcache目录实在太大。可以采用下面的方法安全清除。</p>
		<p>方法一：组策略</p>
		<p>点击"开始→运行"，在运行对话框中输入"gpedit.msc"命令，打开了组策略编辑器，打开"计算机配置→管理模板→系统→Windows文件保护"，在右侧窗体中显示四条文件保护策略使用这些策略就可以轻松定义Windows系统的文件保护功能。</p>
		<p>文件保护功能会备份大量的被保护的文件到dllcache目录中，但随着系统安装的软件越来越多，会发现dllcache目录的体积不断增大，浪费了很多硬盘空间。该策略就是用来限制dllcache目录的大小。在"限制Windows文件保护缓存大小"对话框中，点击"巳启用"选项，然后指定"缓冲区大小"，如我们想限制dllcache目录最大为300MB，就在输入栏中输入"300"即可，最后点击"确定"按钮。</p>
		<p>完成以上设置后，需重新启动系统才能生效。</p>
		<p>方法二：SFC命令</p>
		<p>限制Windows文件保护缓存大小也很简单，如设置为300MB，在命令提示符下输入"SFC /CACHESIZE=300"即可。"<br />　　均重新启动，大小仍然是429M，于是运行"SFC /PURGECACHE"清空之！</p>
		<p class="zoundry_bw_tags">
				<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com -->
				<span class="ztags">
						<span class="ztagspace">Technorati</span> : <a class="ztag" href="http://technorati.com/tag/windows" rel="tag">windows</a></span>
		</p>
<img src ="http://www.blogjava.net/welkinhu/aggbug/78616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinhu/" target="_blank">Welkin Hu</a> 2006-11-02 10:54 <a href="http://www.blogjava.net/welkinhu/archive/2006/11/02/78616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>