多重起動抑制

コードに埋め込みたくなかったんで。
うーん。いまいちだな。
終了するときに開放だしあんまり気にしなくてもいいかと安易に思ってみたり。

class MultiInstanceBlocker {
	static Mutex _mutex;

	static public void Activate( string key ) {
		if ( IsActivate( key ) ) {
			throw new InvalidOperationException( "Already exist process" );
		}
	}

	static public bool IsActivate( string key ) {
		_mutex = new Mutex( false, key );
		var result = !_mutex.WaitOne( 0, false );
		if ( !result ) {
			_mutex.Dispose();
			return false;
		}
		return true;
	}

	static public void Deactivate() {
		if ( _mutex != null ) {
			_mutex.Dispose();
		}
	}
}
static void Main( string[] args ) {
	try {
		MultiInstanceBlocker.Activate( "aa" );
		Console.WriteLine( "Ensure" );
		Console.ReadLine();
		MultiInstanceBlocker.Deactivate();
	} catch ( Exception e ) {
		Console.WriteLine( e );
	}
}