DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Win32APIの使用について

環境/言語:[Windows2003Server、VB.NET2005]
分類:[.NET]

現在、サーバー上で動作するアプリケーションにて、
VB.NETから、「WritePrivateProfileString」を使用して、
INIファイル形式にて、動作制御を行おうと考えております。

「WritePrivateProfileString」ですが、
複数のプロセスから同時に書き込みを行っても
問題ないものなのでしょうか?
(同一セクション、同一キーへの書込みであれば、
 後優先になればOKという判断です。)


お手数ですが、ご存知の方いらっしゃいましたら、
教えてください。

[動作]
Windows2003Server+VB.NET2005
■No22112に返信(ノリさんの記事)
> 現在、サーバー上で動作するアプリケーションにて、
> VB.NETから、「WritePrivateProfileString」を使用して、
> INIファイル形式にて、動作制御を行おうと考えております。

.NETならXML形式が主流かと・・・

> 「WritePrivateProfileString」ですが、
> 複数のプロセスから同時に書き込みを行っても
> 問題ないものなのでしょうか?
>

他のプロセスが使用している場合は例外エラーが
発生するので、try/catchを使用してファイルを
閉じるまで待機するようにして、例外をスロー
しなくなるまで繰り返すとかすればいいかも。
>>「WritePrivateProfileString」ですが、
>>複数のプロセスから同時に書き込みを行っても
>>問題ないものなのでしょうか?
>
> 他のプロセスが使用している場合は例外エラーが
> 発生するので、try/catchを使用してファイルを
> 閉じるまで待機するようにして、例外をスロー
> しなくなるまで繰り返すとかすればいいかも。

Windows APIでの処理なので、例外はたぶん発生しないと思います。
未検証ですが、MSDNによれば戻り値が0なら失敗と判断できそうです。
http://msdn.microsoft.com/ja-jp/library/cc429952.aspx
> 「WritePrivateProfileString」ですが、
> 複数のプロセスから同時に書き込みを行っても
> 問題ないものなのでしょうか?
MSDNのドキュメントでは何も言及されていません。
実際の動作については何ら保証されていません。

現在のバージョンで特定の動作を行っていたとしても、将来にわたってそれが保証されるわけではありません。


要するに、ドキュメントからは読み取れません。

可能性
・完全に排他されるのであれば、先勝ちになるかもしれません。
・排他されないのであれば、ファイルが壊れるかもしれません。
いろいろなご意見、ありがとうございます。

> 要するに、ドキュメントからは読み取れません。

私もこの点を気にしておりました。
実際の動作として、2つのプロセスから無限LOOPで書込み値が+1
されていくような形でINIに書込みを行った範囲では、
どちらのプロセスからも、正しく書き込まれていました。
(前提は、同一キーには書き込まないことです)

ただ、これがOKだからといって、保証の範囲ではないとは
いいきれないと思っております。

他の方式を検討しようと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板