質問者
C言語のCreateProcess関数に関する質問

質問
すべての返信
-
> VisualC++2005ExpressEdition
なら
http://forums.microsoft.com/MSDN-JA/ShowForum.aspx?ForumID=188&SiteID=7
のほうが適切かも。
>親プロセスと同じフォルダになってしまいます。
はどのようにして確認していますか?
また、カレントフォルダはどこになりますか?
>WindowsVista
の場合、今までのOSのように、プログラムのあるフォルダに容易にファイルを作れるようなつくりになっていないところがあります。
(たとえば、C:\Program File配下のフォルダとか)
-
> http://forums.microsoft.com/MSDN-JA/ShowForum.aspx?ForumID=188&SiteID=7
> のほうが適切かも。
ExpressEditionの仕様ではなくプログラミングに関する質問だからこっちのほうがいいと思ったんですが・・・。
> >親プロセスと同じフォルダになってしまいます。
> はどのようにして確認していますか?
> また、カレントフォルダはどこになりますか?
下にコードサンプルを置きます。
コード ブロック/* strCdは親プロセスのカレントフォルダ、
strTmpPathは一時フォルダのパス(GetTempPath()で取得)、
strExePathは実行するExeファイル(strTmpPathに置かれている)のフルパス、
GameTitleはIniファイルから読み込んだ文字列です。 */
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if(CreateProcess(strExePath, NULL, NULL, NULL, FALSE, 0, NULL, strCd, &si, &pi)) {
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
} else MessageBox(NULL, TEXT("ERROR"), GameTitle, MB_ICONSTOP);/* 本来ならstrCdに置かれているIniファイルを読むはずなのに読んでくれません。
しかしstrTmpPathにIniファイルを置いたら読みました。 */
-
ルファー さんからの引用 本来ならstrCdに置かれているIniファイルを読むはずなのに読んでくれません。
もしかして、GetPrivateProfileXxx API にファイル名だけを渡して処理していませんか?
であれば、APIの使い方が間違っています。
このAPIは、原則として、INIファイルをフルパスで渡すという仕様になっています。
ファイル名だけの場合は、EXEのあるフォルダ->Windowsディレクトリという順に検索を行うようになっていたと記憶しております。
#もしかしたら検索順は逆かもしれませんが...
なので、呼び出したアプリ側で、カレントディレクトリを読み取り、そのディレクトリをフルパスで指定する必要があると思います。