none
スタートアップスクリプトから別プロセスを起動する方法は、特殊なのでしょうか? RRS feed

  • 質問

  • はじめまして、おせわになります。

    投稿内容がこのフォーラムでよいのか(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は何も作られませんし、

    ログオン後に確認してみると、無限ループしている筈のプロセスが動いていないのです。

     

    何か、スタートアップスクリプト内では、特別な環境があるのでしょうか?

    別のプロセスを起動することは不可能なのでしょうか?

    ご教示のほど宜しくお願い致します。

    2008年6月17日 3:03

回答