.netの最近のブログ記事

Visual Studio 2005で、アプリケーション起動時にUACの昇格ダイアログを表示させる方法。
(Visual Studio 2008ならもっと簡単。)

Step 6: Create and Embed an Application Manifest (UAC)

Professional Visual Studio » Enabling Your Application for UAC

yourapp.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft- 
     com:asm.v2">
      <ms_asmv2:security>
         <ms_asmv2:requestedPrivileges>
            <ms_asmv2:requestedExecutionLevel level="requireAdministrator">
            </ms_asmv2:requestedExecutionLevel>
         </ms_asmv2:requestedPrivileges>
      </ms_asmv2:security>
   </ms_asmv2:trustInfo>
</assembly>
post build task in your Visual Studio project's Project Properties:
"$(FrameworkSDKDir).\Bin\mt.exe" -nologo -manifest "$(ProjectDir)$(TargetFileName).manifest" -outputresource:$(TargetPath);#1"
or
mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"

カテゴリー:

Tips & Tricks for ASP.NET, IIS, and Visual Web Developer : Tip #51 Did you know... how to use VS2005 to debug with IE8?

1) Open RegEdit
2) Browse to HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main
3) Add a dword under this key called TabProcGrowth
4) Set TabProcGrowth to 0

カテゴリー:

カテゴリー:

エラー : Web サイトのワーカー プロセスが IIS によって停止されました

IISマネージャで、デバッグ対象のアプリケーションプールの詳細設定の「Pingの有効化」をfalseに設定する。

カテゴリー:

ASP.NET 偽装

@IT:連載:プログラミングASP.NET 第17回 ASP.NETにおける認証と認定

ASP.NET偽装を有効にしていると、ASP.NETアプリケーションがIUSRで実行されたりするため、イベントログに書き込めないなど、アクセス権関連のトラブルが発生する可能性がある。

たとえば、ASP.NET偽装を有効にしていたため、以下の例外が発生した。

System.InvalidOperationException がキャッチされました
  Message="ソース 'XXX' のログを開けません。ユーザーに書き込みアクセス権がありません。"
  Source="System"
  StackTrace:
       場所 System.Diagnostics.EventLog.OpenForWrite(String currentMachineName)
       場所 System.Diagnostics.EventLog.InternalWriteEvent(UInt32 eventID, UInt16 category, EventLogEntryType type, String[] strings, Byte[] rawData, String currentMachineName)
       場所 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
       場所 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category)

この例外は、IISの仮想ディレクトリの設定で、ASP.NET偽装を無効にすることで解決した。


カテゴリー:

カテゴリー:

カテゴリー:

現在実行中のメソッド名を取得する MethodBase.GetCurrentMethod()

System.Reflection.MethodBase.GetCurrentMethod().Name

カテゴリー:

C#のstaticコンストラクタが実行中に、他のスレッドから同じクラスのstaticメンバにアクセスがあったとき何が起こるか 【▲→川俣晶の縁側→ソフトウェア→技術雑記】

マルチスレッド環境でも、staticなメンバーへのアクセスは、staticなコンストラクタの実行が完了されるまで遅延されているので、問題なし。

カテゴリー:

カテゴリー:

Debugging Tools for Windowsを使用して、IIS のワーカプロセス上に存在するアプリケーションドメインの情報を取得する方法。

Debugging Tools for Windows のインストール

- Windows 用デバッグ ツール : 概要
http://www.microsoft.com/japan/whdc/DevTools/Debugging/default.mspx

上記サイトより、利用しているOSに合う Debugging Tools for Windows をダウンロードしてインストールする。
サイト中の下記リンクよりダウンロードが可能。

・Debugging Tools for Windows 32 ビット バージョンのインストール
・Debugging Tools for Windows 64 ビット バージョンのインストール

本パッケージに含まれるWinDbg を用いて AppDomain の情報を取得する。


シンボルパスの設定

WinDbg を使用するにあたって、まずはシンボルパスの設定を行う必要がある。
以下の手順でシンボルパスの設定を行う。

1. windbg.exe を起動する。 (デフォルトの設定でインストールした場合、 C:\Program Files\Debugging Tools for Windows\ にある。)

2. [File] メニューより [Symbol File Path] を選択する。 [Symbol Search Path] ダイアログが開く。

3. 開いたダイアログの Symbol path テキストボックスに、以下のように記入する。

SRV*<ダウンストリーム ストア>*http://msdl.microsoft.com/download/symbols

以下の手順を実施するにはMSのサイトで公開しているシンボルが必要となるが、上記ダウンストリーム ストア は、MSのサイトよりシンボルを自動的にダウンロードしキャッシュするフォルダとなる。ここには、自分が書き込み権限を持つ任意のフォルダを指定する。
たとえば、 C:\symbols をダウンストリームストアにする場合、以下のようになる。

SRV*C:\symbols*http://msdl.microsoft.com/download/symbols

- デバッグ ツールとシンボル : はじめに
http://www.microsoft.com/japan/whdc/DevTools/Debugging/debugstart.mspx


w3wp.exe の起動

ASP.NET アプリケーションを起動し、w3wp.exe を起動する。
タスクマネージャから w3wp.exe の PID を確認する。
w3wp.exe がタスクマネージャに現れない場合、実行ユーザごとのフィルタリングが行われている可能性がある。
その場合、 [すべてのユーザーのプロセスを表示] ボタンより、全ユーザのプロセスを表示する。


windbg によるプロセス中の AppDomain 情報の取得

管理者権限でコマンドプロンプトを起動する。
Debugging Tools for Windows のインストール先フォルダへ移動する。
(デフォルトでは C:\Program Files\Debugging Tools for Windowsにある)

以下のコマンドを実行する。

windbg.exe -c ".logopen <logfilename>;.loadby sos mscorwks;!dumpdomain;qd" -p <PID>

<logfilename> にはログファイルの出力先を、 <PID> には、情報を取得したいプロセスの PID を指定する。
今回の場合、 <PID> の部分には w3wp.exe の PID が入ることになる。

たとえば、 PID 1234 のプロセスの AppDomain の情報を c:\log.txt に出力する場合、以下のコマンドになる。

windbg.exe -c ".logopen c:\log.txt;.loadby sos mscorwks;!dumpdomain;qd" -p 1234

以上で、 windbg を用いて、プロセス中に含まれる AppDomain の情報を取得可能。
AppDomain の情報は、上記コマンドで指定した log.txt から確認できる。
その確認方法は以下の通り。


出力結果について

上記コマンドで出力した結果はテキストデータとして指定したパスに保存されている。
当該ファイルをテキストエディタにて開き、下記 2 行に該当する行を探す。

--------------------------------------
Domain <num>:
(<num> には 1 から始まりプロセス中に存在する AppDomain の数までの通し番号が入る。)

出力結果には、上記 2 行を区切りとしてプロセス中に含まれる AppDomain の情報が列挙されている。
この情報より、 AppDomain の存在有無について確認する。


出力結果例

--------------------------------------
Domain 4: 0ecc01a0
LowFrequencyHeap: 0ecc01c4
HighFrequencyHeap: 0ecc0210
StubHeap: 0ecc025c
Stage: OPEN
SecurityDescriptor: 016df778
Name: MyAppDomain_B
(以下、ロードされているアセンブリについての情報が続く)


補足

今回は、SOS デバッガ拡張に含まれている、 DumpDomain コマンドを用いることで、プロセス中の AppDomain の情報を取得した。
SOS デバッガ拡張の詳細は、以下のドキュメントを参照。

- SOS デバッガ拡張 (SOS.dll)
http://msdn.microsoft.com/ja-jp/library/bb190764.aspx

カテゴリー:

カテゴリー:

カテゴリー:

AppDomain.Unload - (hatena (diary 'Nobuhisa))

アンロードするターゲットドメインに終了できないスレッドがある場合、そのドメインをアンロードできない。その場合、呼び出し元スレッドで、CannotUnloadAppDomainExceptionが発生する。

カテゴリー:

Logging ASP.NET Application Shutdown Events - ScottGu's Blog

ASP.NETアプリケーションが再起動(アプリケーションドメインがアンロード)されたら、その原因などをログに書き出すコードスニペット。

カテゴリー:

カテゴリー:

カテゴリー:

カテゴリー:

カテゴリー:

カテゴリー:

1  2  3
track feed
Powered by Movable Type 4.27-ja

このアーカイブについて

このページには、過去に書かれたブログ記事のうち.netカテゴリに属しているものが含まれています。

次のカテゴリはapacheです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。