NVelocityでテンプレートファイルの指定に絶対パスを使用する方法2008年01月13日 17時28分43秒

聞かれることが多いので忘れないようにメモしときます。

NVelocityでテンプレートファイルのファイル名を指定するときに絶対パスを使用するとテンプレートファイルが読み込まれません。

絶対パスを使用するには下のサンプルのようにExtendedPropertiesクラスを使用します。

サンプルソースはこのサイトから引用させていただきました。

ExtendedProperties props = new ExtendedProperties();
props.AddProperty("file.resource.loader.path", new ArrayList(new string[]{".", "C:\\"}));
velocity.Init(props);
template = velocity.GetTemplate("foo\\bar\\somefile.vm");

Windowsサービスから指定したユーザーでプロセスを起動する(解決編)2007年12月14日 15時50分38秒

この前書いた「Windowsサービスから指定したユーザーでプロセスを起動する 」ですが、やっと解決しました。その方法は以下の通りです。

  • ユーザーを指定してプロセスを実行するのにCreateProcessWithLogonWを使用する。
  • CreateProcessWithLogonWの引数dwLogonFlagsにはLOGON_WITH_PROFILEを使用する。
  • CreateProcessWithLogonWの引数のSTARTUPINFOに次のように指定する。
startInfo.lpDesktop = "winsta0\\default";

CreateProcessWithLogonW自体の使い方については検索すればいろいろ出てくると思います。 とりあえずCodeProjectにサンプルコードが掲載されていたのでこれを見てください。

RunAs Class

重要なのはlpDesktopに指定した"winsta0\\default"です。このうちwinstat0はステーション、defaultはデスクトップを指定する文字列です。 ステーションとはここを見ると詳しく解説されています。 簡単に言うとステーションとはユーザーごとに用意されたオブジェクトで、デスクトップはステーションに含まれるオブジェクトの内の1つで、表示画面をつかさどります。 Windowsサービスはふつうのアプリとは違う特殊なステーション・デスクトップ上で動作しているため、サービスから起動したアプリはその特殊なステーションを引き継いでしまいきちんと動作しない物と思われます。

Sandcastle - October 2007 CTP and SandCastle Help File Builder1.6.0.1リリース2007年11月06日 11時43分41秒

SandCastleとSHFBの新バージョンがリリースされてました。
SHFBの履歴を見るとかなりのバグがfixされているようです。
時間を見て試してみようと思います。

Sandcastle - October 2007
http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en

Sandcastle Help File Builder1.6.0.1
http://www.codeplex.com/SHFB

SandCatle不具合解消2007年10月15日 13時20分45秒

以前書いたSandCastleのバグですが原因がわかりました。

SandCastleで作成したHelp2.0形式のファイルをVS2005SDKのHelp Integration Wizardでインストーラを作成した場合、TOCを移行するときにエラーメッセージが出てしまうためインストール時に目次が表示されない不具合がありました。

参考サイト http://blog.livedoor.jp/pctruble/archives/54192381.html

この原因ですが、日本語版のVS2005を使用していたのが悪かったようです。試しに英語版のXPとVS2005を用意してVirtualPC上でやってみたところエラーなど出ずに問題なく作成できました。日本語環境上にインストールしてもヘルプの目次がちゃんと出るようになりました。

VS2005SDKは英語版のみで日本語版が出ていません。そのため日本語環境ではエラーが出てしまうのではないかと思います。

とりあえずSandCastleで作成したヘルプをVSのヘルプに統合する際は英語版の環境を用意しなければならないようです。

SandCastle関連ニューリリース2007年10月02日 16時36分52秒

SandCastle September 2007CTP http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en

Sandcastle Help File Builder1.6.0.0 http://www.codeplex.com/SHFB/Release/ProjectReleases.aspx?ReleaseId=5311

SandCastleの新しいCTPがリリースされました。これに伴ってSandCastle Help File Builderもバージョンアップするようです。 SCHBの変更点を見るとsupport for site map files to define the TOC layoutとあるので以前はまったTOC関連の不具合も治っているかもしれません。1.6.0.0を楽しみに待ちたいと思います。

Sandcastle September Release2007年09月28日 13時59分01秒

http://blogs.msdn.com/sandcastle/archive/2007/09/28/sandcastle-september-release-update.aspx

SandCastleの新しいバージョンが10月1日に出るようです。 いつになったらCTPがとれるんでしょうか。問題なく利用できているので別にいいんですが。

OracleCacheDependency2007年09月21日 19時04分57秒

さっき紹介したOracleのクエリ通知ですが、これをASP.NETのキャッシュとして使用するにはOracleCacheDependencyを実装しないといけません。 SQLServerならSQLCacheDependencyがデフォルトで用意されているのですが、Oracleでは自分で実装する必要があるみたいです。 実装方法は以下のリンクに書いてあるようです。

Implementing OracleCacheDependency for ASP.NET 2.0

9/25追記

OracleCacheDependencyはOracle Providers for ASP.NETというソフトに含まれているようです。Oracle Providers for ASP.NETはODP.NET11.1.0.5に入っています。ただこのソフトはまだ英語版のみでベータなので正式なものが出るまで待つ必要がありそうです。

Oracleでクエリ通知機能を使う2007年09月21日 14時23分28秒

ADO.NET2.0の新機能にクエリ通知機能があります。これはどういう機能かというとデータベースのマスターデータなどをアプリケーション側でキャッシュしたときにデータに変更があるとデータベース側から変更を通知してキャッシュを破棄することができるというものです。 SQLDependencyクラスを使って実装するのですが、この機能はSQLServerでしか使うことはできませんでした。 今度のプロジェクトではOracleを使用するのでOracleでSQLDependencyを使うことができないかと調べていたらちゃんとありました。Oracle10g Release2以上とODP.NETを使用することで実現できるらしいです。 クラスの名前はOracleDependencyです。

参考資料

LoggingAB vs Log4net2007年08月16日 13時25分47秒

仕事でログ出力のパフォーマンスを計測してみました。ファイルとイベントログで10000回ループでログ出力して比較したものです。言われているほどLoggingABは遅くないようです。バージョンがあがってパフォーマンスの問題も解決されているのでしょうか。逆にイベントログ出力時のLog4netの遅さが気になります。結局Appenderの実装次第で変わるんでしょうか。
個人的にはパフォーマンスより出力形式の細かいカスタマイズが可能なLog4netのほうがいいと思っています。


EnterpriseLibraryLog4net
File00:00:02.917695600:00:00.4961281
EventLog00:00:03.403561300:00:16.3768322

ASP.NET AJAXで学ぶAJAX対応コントロール実装の基本(前篇)2007年08月05日 11時55分46秒

ASP.NET AJAXで学ぶAJAX対応コントロール実装の基本(前篇)

ajax対応コントロールの実装方法について書かれている記事です。 後で読もうと思います。