- 締切済み
ディレクトリ作成&二重起動不可
1:プログラム起動時に任意のディレクトリがあるか確認してなければ、作成しあれば実行しないようにするにはどうすればいいでしょうか? 2:プログラムが起動している時の二重起動を防止する関数等はあるのでしょうか? ・起動時にテキストファイル等を作成し、PG終了時に削除するようにして起動しているかの判断をとるようなのは作成したのですが、DOS窓を×で閉じると、削除しないので困っています。 何か良い方法がありましたらよろしくお願いします。 環境 ・WindowsXP ・cygwin(コンパイルのみ)
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
> 1:プログラム起動時に任意のディレクトリがあるか確認してなければ、作成しあれば実行しないようにするにはどうすればいいでしょうか? access関数で判別できます。 > 2:プログラムが起動している時の二重起動を防止する関数等はあるのでしょうか? セマフォを使うのはどうでしょう?
- machongola
- ベストアンサー率60% (434/720)
こんにちは。Win32APIで宜しければ、以下参考程度に。 //グローバルアトムの名前 const char* const ATOM_NAME = "二重起動の防止です"; //ウィンドウが無い場合 int main() { //アトムを探す ATOM atom = ::GlobalFindAtom(ATOM_NAME); //見つかったので引き返す if(atom) { ::printf("%s\n", "防止しました"); return 0; } //アトムが無かったので登録 atom = ::GlobalAddAtom(ATOM_NAME); //何かする ココから int ch; do { ch = _getch(); ch = ::toupper(ch); }while(ch != 'Y'); //何かする ココまで //アトムの始末 ::GlobalDeleteAtom(atom); ::printf("%s\n", "正常終了"); return 0; } //ウインドウを開く場合 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //二重起動起動の防止 if(::FindWindow("ウィンドウのクラス名", 0)) { return 0; } 以下決まり文句 return msg.wParam; }
- pick52
- ベストアンサー率35% (166/466)
あ、あとプログラムが強制終了したときのことを考えると ディレクトリが存在しているときに起動させないという方法は ちょっと危険だと思います。 せめて、期限(タイムアウト)を設けるとかしないと。
- pick52
- ベストアンサー率35% (166/466)
WinAPIなら多重起動を防止することができますが...。 http://www.nayuki.jp/?Windows-%C6%F3%BD%C5%B5%AF%C6%B0%CB%C9%BB%DF