ClickOnceとファイルのロック

Java環境で構成、動作しているアプリケーションサーバにデプロイしたClickOnceアプリケーションの再発行に失敗するという現象に悩まされている。
具体的には一度発行したアプリケーションを、もう一度同じバージョン番号のまま発行しようとするとpublish.htmやsetup.exeのようなファイルを置き換えるのに失敗するという現象だ。

エラー	1	ファイル '〜.publish\publish.htm' を '〜publish.htm' にコピーできませんでした。'publish.htm' を Web に追加できません。  ファイル 'publish.htm' はこの Web に既に存在します。

既にあるのは当たり前でそれを上書きするのを期待するのだが、上手くいかない。

JSDKのバージョンを1.6.0_xから1.4.2_xに戻したり、アプリケーションサーバを変えたりすると直るかと思ったのだが、そうでもないようだ。ところがアプリケーションサーバをTomcat6に変えると全く問題が発生しなかったりする。
恐らくはそのアプリケーションサーバの問題だと思うのだが、それにしても以前は全く発生していなかった不具合である。ClickOnceがらみでVisual Studio 2005の振舞いが変わったのか、それともアプリケーションサーバに充てたアップデートに原因があったのか。さっぱりわからん。

追記:
(問題が発生しているのはWindows Server上なので)FileMonによりpublich.htmがどう扱われているのかのログを採取してみた。

52	10:23:41	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
53	10:23:41	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
55	10:23:41	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
56	10:23:41	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
57	10:23:41	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
60	10:23:42	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
61	10:23:42	javaw.exe:3252	OPEN	〜publish.htm	SUCCESS	Options: Open  Access: Read	
62	10:23:42	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
63	10:23:42	javaw.exe:3252	OPEN	〜publish.htm	SUCCESS	Options: Open  Access: 00100080	
64	10:23:42	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
65	10:23:42	javaw.exe:3252	CLOSE	〜publish.htm	SUCCESS		
66	10:23:42	javaw.exe:3252	READ 	〜publish.htm	SUCCESS	Offset: 0 Length: 8096	
67	10:23:42	javaw.exe:3252	READ	〜publish.htm	SUCCESS	Offset: 8096 Length: 8096	
71	10:23:43	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
72	10:23:43	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
74	10:23:43	javaw.exe:3252	OPEN	〜publish.htm	SUCCESS	Options: Open  Access: 00100080	
75	10:23:43	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
76	10:23:43	javaw.exe:3252	CLOSE	〜publish.htm	SUCCESS		
77	10:23:43	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
78	10:23:43	javaw.exe:3252	OPEN	〜publish.htm	SUCCESS	Options: Open  Access: Read	
79	10:23:43	javaw.exe:3252	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
80	10:23:43	javaw.exe:3252	READ	〜publish.htm	SUCCESS	Offset: 0 Length: 8096	
81	10:23:43	javaw.exe:3252	READ	〜publish.htm	SUCCESS	Offset: 8096 Length: 8096	

このログはVisual Studio 2005がpublish.htmを発行した後に出力されたものだが、java.exeが同ファイルをOPEN, READした後CLOSEしていないことが解る。同様にTomcat6上で全く同じ条件でログを採取してみたのが、次だ。

52	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
53	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
54	10:27:49	javaw.exe:1232	DIRECTORY	〜	SUCCESS	FileBothDirectoryInformation: publish.htm	
55	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
56	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
57	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
58	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
59	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
60	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
61	10:27:49	javaw.exe:1232	OPEN	〜publish.htm	SUCCESS	Options: Open  Access: Read	
62	10:27:49	javaw.exe:1232	READ 	〜publish.htm	SUCCESS	Offset: 0 Length: 8805	
63	10:27:49	javaw.exe:1232	CLOSE	〜publish.htm	SUCCESS		
64	10:27:49	javaw.exe:1232	OPEN	〜publish.htm	SUCCESS	Options: Open  Access: 00100080	
65	10:27:49	javaw.exe:1232	QUERY INFORMATION	〜publish.htm	SUCCESS	Attributes: A	
66	10:27:49	javaw.exe:1232	CLOSE	〜publish.htm	SUCCESS		

こちらはちゃんとCLOSEしているな。