**Problem**:

I have multiple instances of the same C# application running on different PCs (OS: Windows XP, Windows 7) in the same LAN. I have to share some configuration data among them. Each process must have read-write access to the data. My employer insists on storing these shared data in a file, which is in a shared directory on one of these PCs. 

**Possible solutions:** 

1. [Exclusive file opening](https://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use): The data is stored in a TXT file (serialization to and from a binary file is also an option). Each process uses `File.Open` with `FileShare.None` when trying to open the file. Getting an `IOException` means that the file is already in use, so the process has to [wait and try again later](https://stackoverflow.com/questions/3138483/emulate-waiting-on-file-open-in-c-sharp-when-file-is-locked).
2. [SQL Server CE embedded DB](https://stackoverflow.com/questions/1992713/sql-server-ce-in-a-multi-user-scenario-is-this-really-really-stupid): The data is stored in an SDF file. The engine can handle at most 256 simultaneous connections (v3.5 SP2), which is more than enough.
3. [SQLite embedded DB](http://code.google.com/p/csharp-sqlite/): The data is stored in an SQLite DB file. The [documentation](http://www.sqlite.org/faq.html#q5) says SQLite works, but may be unreliable when used on a network share.
4. Other?

What is the preferred way to do this?