はじめまして、おせわになります。
投稿内容がこのフォーラムでよいのか(OSのフォーラムほうが相応しかったか)迷いましたが
こちらに投稿させていただきました。
クライアントPCをWindowsXP Pro(SP3)、サーバをWindowsServer2003(R2 SP2)として
ActiveDirectoryのグループポリシーで設定可能な
コンピュータのスタートアップ時に、
各マシンのローカルファイルにあるEXEモジュール(B)を呼び出すEXEモジュール(A)を登録しました。
呼び出し元のEXEモジュール(A)が動作し、
CreateProcessでEXEモジュール(B)を正常に(GetLastError()で0)呼び出しているようなのですが、
EXEモジュール(B)が動いた形跡がなく、無限ループさせているはずなのに
ログオン後タスクマネージャでプロセスを確認しても、見つかりません。
1.両方のEXEモジュールには、Everyoneへフルコントロール権をつけています。
(エラーコード0で帰ってきているので問題ないとは思っているのですが・・・)
2.EXEモジュール(A)では、次のようなごく単純なコードを書いてあります。
Code Snippet
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
::ZeroMemory(&sInfo,sizeof(sInfo));
::ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb = sizeof(sInfo);
DWORD dwErr;
DWORD dwWritten;
char szBuff[16];
::CreateProcess(NULL,"C:\\exe_b.exe",NULL,NULL,FALSE,0,NULL,NULL,&sInfo,&pInfo);
dwErr = ::GetLastError();
wsprintf(szBuff,"A %d\r\n",dwErr);
HANDLE hFile = ::CreateFile("C:\\TEST.LOG",GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
::SetFilePointer(hFile,0,NULL,FILE_END);
::WriteFile(hFile,szBuff,lstrlen(szBuff),&dwWritten,0);
::CloseHandle(hFile);
exe_b.exeには、こちらもごく単純に1秒おきにローカルファイルへ追記するだけのコードを書きました。
Code Snippet
DWORD dwW;
SYSTEMTIME st;
char szBuff[128];
for(;;) {
::GetLocalTime(&st);
wsprintf(szBuff,"%d/%d/%d %02d:%02d:%02d.%03d\r\n",
st.wYear,st.wMonth ,st.wDay,st.wHour ,st.wMinute ,st.wSecond ,st.wMilliseconds);
HANDLE hFile = ::CreateFile("C:\\TEST2.LOG",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
::SetFilePointer(hFile,0,NULL,FILE_END);
::WriteFile(hFile,szBuff,lstrlen(szBuff),&dwW,0);
::CloseHandle(hFile);
::Sleep(1000);
}
EXE(A)がつくるファイルはC:\TEST.LOG"へ"A 0"のように毎回書き込まれます。
しかし、EXE(B)がつくるはずのファイルC:\TEST2.LOGは何も作られませんし、
ログオン後に確認してみると、無限ループしている筈のプロセスが動いていないのです。
何か、スタートアップスクリプト内では、特別な環境があるのでしょうか?
別のプロセスを起動することは不可能なのでしょうか?
ご教示のほど宜しくお願い致します。