打杂

好编程,不求精通.每逢Bug,便欣然捉虫!
posts - 19, comments - 10, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2012年5月3日

如题.

posted @ 2012-05-03 16:59 四六成双 阅读(4) 评论(0) 编辑

2011年5月12日

大名鼎鼎Reflector , 要收费. 只有14天试用期. 网上有破解的,

但是如果使用到期后能再恢复使用之前的环境,应该可以继续试用. 

关键就是要找到,运行后reflector改了哪些咚咚!

猜测的话基本是在注册表中. 用Regsnap抓了运行前和运行后的注册表,发现改动基本在:

HKEY_CURRENT_USER\Software\Red Gate

HKEY_CURRENT_USER\Software\Red Gate Software Ltd.

HKEY_CURRENT_USER\Software\Thingummy Software

HKEY_USERS\S-1-5-21-329068152-1085031214-839522115-1269_Classes\CLSID\{36b2a277-c0b2-40c5-9671-285b3380500d}

最后一个位置是比较隐蔽的. 首先是根据当前用户相关的.然后就是一个guid. 

其实找起来也很简单.因为这个{36b2a277-c0b2-40c5-9671-285b3380500d}没有子键.

另外,这个guid每个版本都不一样.

写个reg文件,内容如下:

Windows Registry Editor Version 5.00


[
-HKEY_CURRENT_USER\Software\Red Gate]
[
-HKEY_CURRENT_USER\Software\Red Gate Software Ltd.]
[
-HKEY_CURRENT_USER\Software\Thingummy Software]
[
-HKEY_USERS\S-1-5-21-329068152-1085031214-839522115-1269_Classes\CLSID\{36b2a277-c0b2-40c5-9671-285b3380500d}]
  

每次到期了,就执行一下. 凑合着用半月.

posted @ 2011-05-12 16:17 四六成双 阅读(463) 评论(0) 编辑

2011年3月16日

InnerException 为: {"Server cannot set content type after HTTP headers have been sent."}

经debug发现,是在:

  1  public string ContentType

 2     {
 3       get
 4       {
 5         return this._contentType;
 6       }
 7       set
 8       {
 9         if (this._headersWritten)
10         {
11           if (this._contentType != value)
12           {
13             throw new HttpException(System.Web.SR.GetString("Cannot_set_content_type_after_headers_sent"));
14           }
15         }
16         else
17         {
18           this._contentTypeSet = true;
19           this._contentType = value;
20         }
21       }
22     }

抛出的异常,调用是在:

   private void SetIntrinsics(HttpContext context, bool allowAsync)

    {
      ......

      HttpCapabilitiesBase browser 
= this._request.Browser;
      
this._response.ContentType = browser.PreferredRenderingMime;

当第二次设置 ContentType并且两次不一致时,就会出现这个错误. 那么第一次是我们自己的程序设置的,类型是Text/XML.第二次是系统设置的,

值是text/html .这样Exception就出现了.

我们需要返回的类型是XML,因此需要修改第二次设置的值,也就是说要更改 browser.PreferredRenderingMime,this._request.Browser.所以:

在 Server.Transfer前加入如下代码: 

1 MyHttpBrowserCapabilities browse = new MyHttpBrowserCapabilities();

2 browse.Capabilities = new Hashtable();
3 BrowserCapabilitiesFactory factroy = new BrowserCapabilitiesFactory();
4 factroy.ConfigureBrowserCapabilities(HttpContext.Current.Request.Headers, browse);
5 HttpContext.Current.Request.Browser = browse;
6 HttpContext.Current.Server.Transfer(....

Class MyHttpBrowserCapabilities 也很简单:

  1  public class MyHttpBrowserCapabilities : HttpBrowserCapabilities

 2     {
 3         
 4         public override string PreferredRenderingMime
 5         {
 6             get
 7             {
 8                 return "Text/XML";
 9             }
10         }
11     }

指示Mime一样而已.这样就不会出现Exception了. 

posted @ 2011-03-16 17:51 四六成双 阅读(227) 评论(0) 编辑

2011年1月25日

今天同事报winxp登录进去的时候就报:winlogon.exe应用程序错误,关掉错误框后机器就蓝屏. 

但是用其他的用户登录进去是好的,说明不是硬件问题.

把 dump的文件winlogon.exe.hdmp等拷贝到自己机器上,开windbg分析:

!analyze -v 

 *** ERROR: Symbol file could not be found.  Defaulted to export symbols for faultrep.dll - 

Unable to load image C:\WINDOWS\system32\PCANotify.dll, Win32 error 0n2
*** WARNING: Unable to verify timestamp for PCANotify.dll
*** ERROR: Module load completed but symbols could not be loaded for PCANotify.dll
Unable to load image C:\Program Files\ShiQiang\wnime\dll32\wnupdate.dll, Win32 error 0n2
*** WARNING: Unable to verify timestamp for wnupdate.dll
*** ERROR: Module load completed but symbols could not be loaded for wnupdate.dll
Unable to load image C:\Program Files\ShiQiang\wnime\dll32\wnpy_Query.dll, Win32 error 0n2
*** WARNING: Unable to verify timestamp for wnpy_Query.dll
*** ERROR: Module load completed but symbols could not be loaded for wnpy_Query.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for wlnotify.dll - 
*** WARNING: Unable to verify timestamp for WgaLogon.dll
*** ERROR: Module load completed but symbols could not be loaded for WgaLogon.dll
GetPageUrlData failed, server returned HTTP status 404
URL requested: http://watson.microsoft.com/StageOne/winlogon_exe/5_1_2600_5512/wnpy_StatusWnd_dll/2008_7_11_1/000027a2.htm?Retriage=1
FAULTING_IP: 
wnpy_StatusWnd+27a2
699027a2 ??              ???
EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 699027a2 (wnpy_StatusWnd+0x000027a2)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 00000000
Attempt to read from address 00000000
PROCESS_NAME:  winlogon.exe
ADDITIONAL_DEBUG_TEXT:  
Use '!findthebuild' command to search for the target build information.
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols.
FAULTING_MODULE: 7c900000 ntdll
DEBUG_FLR_IMAGE_TIMESTAMP:  4a31ce4c
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s".
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s".
EXCEPTION_PARAMETER1:  00000000
EXCEPTION_PARAMETER2:  00000000
READ_ADDRESS:  00000000 
FOLLOWUP_IP: 
wnpy_StatusWnd+27a2
699027a2 ??              ???
MOD_LIST: <ANALYSIS/>
FAULTING_THREAD:  0000029c
BUGCHECK_STR:  APPLICATION_FAULT_NULL_POINTER_READ_WRONG_SYMBOLS
PRIMARY_PROBLEM_CLASS:  NULL_POINTER_READ
DEFAULT_BUCKET_ID:  NULL_POINTER_READ
IP_ON_HEAP:  150100d0
FRAME_ONE_INVALID: 1
LAST_CONTROL_TRANSFER:  from 150100d0 to 699027a2
STACK_TEXT:  
WARNING: Stack unwind information not available. Following frames may be wrong.
0006d914 150100d0 69924b00 01010074 00000016 wnpy_StatusWnd+0x27a2
0006d918 69924b00 01010074 00000016 00000005 0x150100d0
0006d91c 01010074 00000016 00000005 00000019 wnpy_StatusWnd+0x24b00
0006d920 00000000 00000005 00000019 00000016 winlogon+0x10074
STACK_COMMAND:  ~0s; .ecxr ; kb
SYMBOL_STACK_INDEX:  0
SYMBOL_NAME:  wnpy_StatusWnd+27a2
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: wnpy_StatusWnd
IMAGE_NAME:  wnpy_StatusWnd.dll
BUCKET_ID:  WRONG_SYMBOLS
FAILURE_BUCKET_ID:  NULL_POINTER_READ_c0000005_wnpy_StatusWnd.dll!Unknown
WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/winlogon_exe/5_1_2600_5512/48027549/wnpy_StatusWnd_dll/2008_7_11_1 /4a31ce4c/c0000005/000027a2.htm?Retriage=1
Followup: MachineOwner
---------
发现是这个动态库wnpy_StatusWnd.dll  内抛得AV. 

 C:\Program Files\ShiQiang\wnime\Dll32\wnpy_StatusWnd.dll 

 卸载掉后就好了.

posted @ 2011-01-25 14:37 四六成双 阅读(118) 评论(0) 编辑

2010年10月14日

Vs自带的Visual Studio Development_server非常好用.比XP的IIS强多了. XP的IIS经常报访问数过多.

但是, WebDev.WebServer.exe 有个限制就是,只能内环网访问,就是只能用localhost 或者127.0.0.1访问.

要是能够对外服务的话,岂不是可以当个IIS 了?

 

 查了一下引用.只用了WebDev.WebHost.dll. 理论上有了WebDev.WebHost.dll和WebDev.WebServer.exe就可以架设了.

现在需要的就是去掉内环访问限制.从Reflector中查找:

在 方法里:

Microsoft.VisualStudio.WebHost.Server 

public void Start()
{
    
this._socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
this._socket.ExclusiveAddressUse = true;
    
try
    {
        
this._socket.Bind(new IPEndPoint(IPAddress.Loopback, this._port));//这里开启的是内环网监听.
    }
.......
 

 改成:

this._socket.Bind(new IPEndPoint(IPAddress.Parse(ConfigurationSettings.AppSettings["ServerIP"]), this._port));//从配置文件读取IP

 

 在

Declaring Type: Microsoft.VisualStudio.WebHost.Request

 private bool TryParseRequest()

{
    
this.Reset();
    
this.ReadAllHeaders();
    
if (!this._connection.IsLocal)//这里检查了是不是本地的请求.需要弊掉.
    {
        
this._connection.WriteErrorAndClose(0x193);
        
return false;
    }

   ....略

    
return true;

 基本就去掉内环网访问的限制了.

 下面就需要来修改.

1. 首先把WebDev.WebHost.dll去掉强命名,再反编译成IL.

2. 修改IL. 

3.编译IL.编译要用新的Key给它强命名.

4.把 WebDev.WebServer.exe 反编译成IL,把引用WebDev.WebHost.dll的签名改成刚生成的.

5.编译新的WebDev.WebServer.exe.

6.新建 WebDev.WebServer.EXE.config,并在appSettings添加ServerIP.

 至此,就可以把本机的IP配置到ServerIP来启动Web服务了.

 

WebDevServer.rar 

WebDevServer4.0.rar 

posted @ 2010-10-14 12:31 四六成双 阅读(1860) 评论(10) 编辑

2010年7月2日

摘要: 如果是Forms认证的话,实现起来很简单,因为相关的凭据都在cookie中,只要把所有的cookie都付给HttpWebRequest就可以了.代码如下:[代码]但是如果是Windows集成认证的话,身份凭据就不在cookie中的.因此需要调用LogonUserIdentity.Impersonate()来模拟,然后再取用户身份信息.代码如下:[代码]//HttpRequestcurRequest...阅读全文

posted @ 2010-07-02 18:03 四六成双 阅读(96) 评论(0) 编辑

2010年6月29日

摘要: 主要API:1[DllImport("oleacc.dll",PreserveSig=false)][代码]源代码:/Files/huigll/GetDRCnetContent.rar阅读全文

posted @ 2010-06-29 17:18 四六成双 阅读(122) 评论(0) 编辑

2010年6月25日

摘要: 用sa执行OpenDataSource语句正常,但是用Network Service执行就报这个错误. 说明是权限问题.把sysadmin的Server Roles赋给此用户,也可以正确执行.但是安全性太恐怖. google了一哈,基本都是引自http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/0cec4ce4-d...阅读全文

posted @ 2010-06-25 13:29 四六成双 阅读(212) 评论(0) 编辑

2010年6月1日

摘要: 折腾了一下午.做记录以备忘.先下载cabarc.exe,从http://support.microsoft.com/kb/310618假设cabarc.exe加压到D:\temp\11111\BIN\目录下要把D:\vsc_old目录下的所有文件,包括子文件都添加到cab命令如下:D:\VSC_old>D:\temp\11111\BIN\cabarc -r -p N d:\rr.cab *阅读全文

posted @ 2010-06-01 16:36 四六成双 阅读(2035) 评论(0) 编辑

2010年2月5日

摘要: 错误框如下图:代码也很简单,缩减如下:[代码]错误指在这行<asp:TextBoxID="txtCode"runat="server"onblur='foo()'></asp:TextBox>错误消息就是:Error: Object expected.因为其他的浏览器运行正常,也没有看出哪里代码不对.所以有点见鬼的味道.调试过程如下:1.把此页面生成的html代码另存一份到...阅读全文

posted @ 2010-02-05 15:42 四六成双 阅读(2218) 评论(0) 编辑