• 締切済み

ディレクトリ作成&二重起動不可

1:プログラム起動時に任意のディレクトリがあるか確認してなければ、作成しあれば実行しないようにするにはどうすればいいでしょうか? 2:プログラムが起動している時の二重起動を防止する関数等はあるのでしょうか? ・起動時にテキストファイル等を作成し、PG終了時に削除するようにして起動しているかの判断をとるようなのは作成したのですが、DOS窓を×で閉じると、削除しないので困っています。 何か良い方法がありましたらよろしくお願いします。 環境 ・WindowsXP ・cygwin(コンパイルのみ)

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> 1:プログラム起動時に任意のディレクトリがあるか確認してなければ、作成しあれば実行しないようにするにはどうすればいいでしょうか? access関数で判別できます。 > 2:プログラムが起動している時の二重起動を防止する関数等はあるのでしょうか? セマフォを使うのはどうでしょう?

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

 こんにちは。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; }

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc429245.aspx
全文を見る
すると、全ての回答が全文表示されます。
  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

あ、あとプログラムが強制終了したときのことを考えると ディレクトリが存在しているときに起動させないという方法は ちょっと危険だと思います。 せめて、期限(タイムアウト)を設けるとかしないと。

全文を見る
すると、全ての回答が全文表示されます。
  • pick52
  • ベストアンサー率35% (166/466)
回答No.1

WinAPIなら多重起動を防止することができますが...。 http://www.nayuki.jp/?Windows-%C6%F3%BD%C5%B5%AF%C6%B0%CB%C9%BB%DF

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ディレクトリの内容

    環境はCygwinです。 ls -l とコマンドを打てばCygwin上にディレクトリの内容が表示されますが ls コマンドは打ち込まず, 自分で作成したプログラムで同じような動作をさせることは可能でしょうか? 作業ディレクトリ中のテキストファイルの名前をディレクトリから読み込んでCygwin上で表示させたいのですが・・・

  • プログラムの二重起動防止

    プログラムの二重起動を防止したいんですが、V.B.のようにjavaにも、二重防止の関数があるのでしょうか? あるとすれば、どういったものなのでしょうか?

    • ベストアンサー
    • Java
  • Borland C++ Builderで簡単なC言語プログラムの作成・実行

    Borland C++ Builderで簡単なCのプログラムを作り実行させるにはどうしたらよいですか? DOS窓上でコンパイルするのではなく、Borland C++ Builderのメニューから行いたいのです。 一応、「ファイル→新規作成→その他→Cファイル」でCのファイルは作成できるのですが、このファイルを「プロジェクト→ユニットのコンパイル」でコンパイルすることができません。 Formオブジェクト(?)を作成しておくとコンパイルできます。 Formは特に必要ないので、FormなしでCのファイルだけをコンパイルしたいのです。 DOS窓でのコンパイル・実行はできます。 事情があってBorland C++ Builderを使わなくてはなりませんので、他のIDEはこの際全く解決になりません。 よろしくお願いします。

  • ディレクトリ名をショートファイル名で知る方法は?

    こんにちは。 Windows9xなどにおいて、 C:\Program Files\TTERMPRO のように、ディレクトリ名をロングファイル名ではなく、ショートファイル名で書きたい場合というのが出てくることがあります。(バッチファイルを作成しておくなどの時) (例の場合には c:\progra~1\ttermpro になるのかも知れない) DOS窓で dir/s のような見方でファイルではわからなくもないのですが、ディレクトリを知る方法やコマンド等があればアドバイスいただきたく思っています。

  • Word2000にて起動、新規作成しても同じファイルが開いてしまう

    OS:WindowsXP Office2000を使用 上記、環境でWordを起動または新規作成すると、かならず同じファイル(1行目に3文字だけ表示)が開いてしまいます。 このファイル(文字)は以前に私が入力した物ですが、保存もしていません。しかし、何度、起動・新規作成をしてもそのファイルが開いてしまいます。 年のため、任意のファイル名を付けて一度保存し、削除(ゴミ箱も)し、さらに同一ファイル名で全ドライブ内を検索して無いことを確認後、起動・新規作成してもそのファイルが開いてしまいます。 Officeそのものをアンインストールし、再インストールしても現象は変わりません。 アイコンから起動しても、プログラムからWordを直接起動しても同現象です。 まったく使い物にならなくて困っています。 どうか助けてください。

  • スタートアップの二重起動

    WindowsXP Professional SP1で、All Usersのスタートアップ項目に「覚え書」「SpotWeather」など、いくつかのソフトを登録しているのですが、これらのソフトが起動時に必ず二重起動してしまいます。 二重起動できないものはいいのですが、二重起動するとエラーメッセージが出るものなどは特に気になります。 もちろん、All Users以外にスタートアップ項目への登録はないですし、一旦全てのプログラムを終了させてから電源をOFFにして再度起動してみても同じ状況でした。 また、msconfigで確認すると、スタートアップに登録しているソフトに関して、スタートアップ項目として、場所が「Common Startup」のものと「Startup」のものとの2種類があったのですが、片方のチェックを消すともう片方も消えてしまい、全く起動しないという状況になってしまいます。 どこかで確認・修正する方法はないでしょうか?

  • スクリーンセーバーの二重起動(VC#)

    Visual C# 2005の「スクリーンセーバースタートキット」についてなんですが、このプログラムには見たところ二重起動防止のコードがないんですが、必要ないんでしょうか。だとしたらその理由はなんでしょうか。あるいはもし私が見落としているのならどこにあるのか、教えて頂けないでしょうか。

  • "Xm/XForm.h:そのようなファイル、ディレクトリはありません"って?

    X-Windowプログラムで本にあったプログラムをそのまま写して gcc ファイル名 -lX11 -lXm -lXim -lXt でコンパイルをしようとしたら Xm/XForm.h:そのようなファイル、ディレクトリはありません Xm/XLabel.h:そのようなファイル、ディレクトリはありません Xm/XPushB.h:そのようなファイル、ディレクトリはありません Xm/XText.h:そのようなファイル、ディレクトリはありません Xm/XRowColumun.h:そのようなファイル、ディレクトリはありません Xm/XCascadeB.h:そのようなファイル、ディレクトリはありません Xm/XMessageB.h:そのようなファイル、ディレクトリはありません というメッセージがでてきました。 これをコンパイルさせるにはどうしたらいいのですか? ちなみに関係があるのかわかりませんがその本はX11R4でプログラムを作成したと書いてありました。 わたしの環境はKondoraで、X11R6というのが入っているようです。 今、プログラムを組むのにコンパイルすら通らないのでまったく進みません。 私はぜんぜん無知の初心者なのでよろしければ詳しく教えてください。 お願いします。

  • C言語でコマンド引数にワイルドカードを使うには?サブディレクトリも探索させるには?

    C言語で(下記の環境で) ワイルドカードを使うにはどうしたら良いでしょうか? 現在作成中のプログラムで、program.exe data1012.log とかいう形で処理ができるようになりました。ところで、引数に書いたdata1012.logとかが、300個ぐらいあるとして(あるいは別のdirectoryに更に1000個とか、そういうdirが20個ぐらいあり)これを、program.exe *.logとして、一発で処理させることはできるでしょうか?ワイルドカードの展開と、サブディレクトリの探索どちらかだけでもありがたいです。 どうぞよろしくお願い致します。 環境:Borland C v5.5 無料版, windows2000 (DOS窓), ThinkPadです。

  • win2kでDOS起動後に

    win98で作成した「DOS起動ディスク」を使用し、win2kでDOSを起動したところ「dir」コマンドでルートディレクトリ(C:)を見ようとするとうまくいきません。どうすればうまくいくのでしょうか?宜しくお願いいたします。