9.209 SYSTEM_COMMAND
注意: 9.1 組み込み関数の規則 利用オプション
オペレーティング・システムのコマンドを実行します。
引数
番号
|
タイプ
|
必須/任意
|
記述
|
最小長
|
最大長
|
最小小数桁数
|
最大小数桁数
|
1
|
A
|
必須
|
コマンド実行オプション
X = 同期プロセス経由で実行。
B = サイレント・モードにて同期プロセス経由で実行。
S = コマンド・インタープリタ・ウィンドウの「システム」コマンド・インターフェース経由で実行
H = "ShellExecute"コマンド・インターフェース経由で実行
A = 非同期プロセス経由で実行
W = 下位互換性のみ。代わりに"S"を使用してください。
IBM iの場合: すべてのオプションで、コマンドは同期実行されます。
|
1
|
1
|
|
|
2
|
A
|
任意
|
コマンド・ストリング1
|
1
|
256
|
|
|
3
|
A
|
任意
|
コマンド・ストリング2
|
1
|
256
|
|
|
4
|
A
|
任意
|
コマンド・ストリング3
|
1
|
256
|
|
|
5
|
A
|
任意
|
作業ディレクトリ
|
1
|
256
|
|
|
|
戻り値
番号
|
タイプ
|
必須/任意
|
記述
|
最小長
|
最大長
|
最小小数桁数
|
最大小数桁数
|
1
|
N
|
必須
|
オペレーティング・システムからの戻り/応答コード
IBM iの場合: 0 = コマンドは正常に実行された 1 = コマンドは正常に実行されなかった
|
3
|
7
|
0
|
0
|
|
技術上の注記 - すべてのプラットフォーム
- この組み込み関数を使用することによって、ファンクションにオペレーティング・システムへの依存性が生まれます。
アプリケーション設計者は、この組み込み関数を使用することに関して全責任を負います。また、この組み込み関数を使用した場合、異なるオペレーティング・システム間(または、同じオペレーティング・システムの異なるバージョン間でも)に可搬性があることは、明示黙示を問わず保証されません。
- この機能を使用して、X_RUNのエントリー・ポイントを呼び出さないでください。この機能は、別のX_RUNプロセスを開始または引き起こすために使用することはできますが、そのプロセスを再帰的に呼び出すために使用することはできません。
- Windows プラットフォームにおいては、原則として、コマンド実行オプションについて、最初に"X"オプションを試し、希望どおりにコマンドが処理されなかった場合に"S"オプションを使用するようにしてください。
実行オプションの概要は以下の通りです。
- ·"X" オプションを指定すると、すべてのプラットフォームでコマンドが同期実行されるため、"X"オプションを使用することをお勧めします。このオプションを使用すると、LANSAファンクションはコマンドが実行されている間待機します。Windows Desktop Heap Managementが有効な場合、作成されるプロセスは、完全にWindows Desktop Heap Managementによって制御されます。上記以外の場合、作成されるプロセスは、親のデスクトップ・ヒープを使用します。戻りコード2は、コマンドが見つからないか、または依存DLLが見つからないことを示します。IBM i およびLinuxにおいては、このオプションは、"S" オプションと同じように実行されます。
下記の"X"オプションの例では、テキストファイルを表示するためWindowsの notepad.exeを呼び出しています。
USE BUILTIN(SYSTEM_COMMAND) WITH_ARGS('X' 'notepad.exe' ' ' 'c:\temp\x.txt') TO_GET(#STD_NUM)
"X" オプションによって、コマンド・インタープリタは開始されないため、COPY、DELなどのコマンドはサポートされません。このようなコマンドを使用する必要がある場合、 "S"オプションを使用してください。コマンド・プロンプトを実行して、Helpと入力すると、Windowsプラットフォームで使用するコマンドのリストを確認することができます。
- ·"B" オプションは "X"オプションと同じですが、Windowsプラットフォームでは、非表示かつバックグラウンドで実行されます。
Use Builtin(SYSTEM_COMMAND) With_Args(B ('c:\temp\x.cmd >> c:\temp\output.txt 2>&1')) To_Get(#STD_NUM)
- ·"S" オプションを指定すると、コマンドは標準のC「システム」コマンドとして実行されます。このオプションにより、コマンド・インタープリタが開始されるため、COPY、DELなどのコマンドはサポートされます。下記は、"S"オプションを使用してコマンド・ラインを実行する例です。
USE BUILTIN(SYSTEM_COMMAND) WITH_ARGS('S' 'help.exe > c:\temp\x.txt') TO_GET(#STD_NUM)
- ·"H" オプションはWindows環境でのみ使用可能であり、後続の引数で指定したファイルに対する、オペレーティング・システムにリンクしたエディター/ビューアーを呼び出します。したがって、コマンド・ストリング1が"c:\temp\test.doc"を含む場合、.docファイル(おそらくMS Word)に関連付けられたオペレーティング・システムのエディターが開始されます。同様に、"c:\temp\test.htm"の場合、HTMLブラウザーが開始されます。エディター/ビューアーは非同期で実行されます。下記の例は、"H"オプションにより、システムの初期アプリケーションを使用してテキスト・ファイルを表示しています。
USE BUILTIN(SYSTEM_COMMAND) WITH_ARGS('H' 'c:\temp\x.txt') TO_GET(#STD_NUM)
- ·"A" オプションは、コマンドを非同期実行すること以外は"X"オプションと同じです。サポートされるすべてのWindowsプラットフォームで完全にサポートされます。他のプラットフォームにも実装されていますが、予測どおりに動作しないことがあります。LANSAは、このような問題に対処しない権利を保有しています。
- ·"W" オプションは、下位互換性のために用意されています。新しいアプリケーションには"S"オプションを使用してください。
技術上の注記 - WindowsおよびLinux
- コマンドおよびコマンドを実行できる環境に関するルールは、オペレーティング・システムによって異なります。
- コマンドが有効であること、およびそのコマンドが予想どおりに機能することをテストするのは、アプリケーション設計者の責任です。
- アプリケーション設計上の重要なポイントでこの組み込み関数を使用する場合は、この組み込み関数が予想どおりに機能することを確認してから、アプリケーションを設計してください。
技術上の注記 - IBM i
- 指定されるオペレーティング・システムのコマンドは、IBMコマンド実行(QCMDEXC) APIを経由して実行できる必要があります。
- SYSTEM_COMMAND を経由して実行されるコマンドは、LANSAシステムの所有者ユーザー・プロファイルの権限、およびUSEADPAUT(*NO)が指定された呼び出しスタックでエントリーによってチェーンが中断されない限り、USRPRF(*OWNER)が指定された呼び出しスタック内の別のエントリーのユーザー・プロファイルの権限を適用します。
これがユーザーのサイト・セキュリティ・ポリシーに適合しない場合、次のコマンドを使用してください。
CHGPGM PGM(M@SYEXEC) USRPRF(<your value>) USEADPAUT(<your value>)
LANSAシステムへのアップグレード後、上記の値を確認する必要があります。