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にサンプルコードが掲載されていたのでこれを見てください。
重要なのは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秒
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 Release ― 2007年09月28日 13時59分01秒
http://blogs.msdn.com/sandcastle/archive/2007/09/28/sandcastle-september-release-update.aspx
SandCastleの新しいバージョンが10月1日に出るようです。 いつになったらCTPがとれるんでしょうか。問題なく利用できているので別にいいんですが。
OracleCacheDependency ― 2007年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 Log4net ― 2007年08月16日 13時25分47秒
個人的にはパフォーマンスより出力形式の細かいカスタマイズが可能なLog4netのほうがいいと思っています。
EnterpriseLibrary | Log4net | |
File | 00:00:02.9176956 | 00:00:00.4961281 |
EventLog | 00:00:03.4035613 | 00:00:16.3768322 |
ASP.NET AJAXで学ぶAJAX対応コントロール実装の基本(前篇) ― 2007年08月05日 11時55分46秒
ASP.NET AJAXで学ぶAJAX対応コントロール実装の基本(前篇)
ajax対応コントロールの実装方法について書かれている記事です。 後で読もうと思います。