1.8.4 コマンドの動作

Windows Vistaでは,サービスからスクリプトファイルを実行する場合,従来のOSと同様に,サービスに指定されているユーザアカウントの権限で動作します。しかし,マネージャからスクリプトファイルを実行する場合,管理者グループのユーザでログオンしても,OSのユーザアカウント制御(UAC)によりJP1/Scriptアプリケーションは標準ユーザで実行されます。

標準ユーザで実行されると影響を受けるコマンドを次に示します。

<この項の構成>
(1) アクセス拒否のエラーとなるコマンド
(2) ファイル操作系のコマンド
(3) Exec,NetExecコマンド
(4) TerminateProcessコマンド
(5) GetProcessInfoコマンド

(1) アクセス拒否のエラーとなるコマンド

アクセス拒否のエラーとなるコマンドを表1-3に示します。

これらのコマンドを実行するスクリプトファイルは,管理者権限で実行する必要があります。標準ユーザで実行した場合,コマンドが次のエラーになります。

「0005:アクセスは拒否されました。ファイルの属性又はセキュリティを見直してください。」

スクリプトファイルを管理者権限で実行する方法については「1.8.8 管理者権限での実行」を参照してください。

表1-3 アクセス拒否のエラーとなるコマンド

No.コマンドアクセス拒否のエラーとなる条件
1SetEnviroment第一引数(Type)にSystemEnvを指定
2Rename第三引数(Metod)にRebootを指定
3SetVolLabelなし
4RegWrite第一引数(RegKey)にHKEY_CURRENT_USER以外を指定※1
5RegDelete第一引数(RegKey)にHKEY_CURRENT_USER以外を指定※2
6RegDeleteKey第一引数(RegKey)にHKEY_CURRENT_USER以外を指定※3
7ServiceCreateなし
8ServiceDeleteなし
9ServiceStartなし
10ServiceStopなし
11ServicePauseなし
12ServiceContinueなし
13ServiceChangeなし
14ServiceControlなし
15MakeGroup第二引数(RootType)にLcl_Programを指定
16DeleteGroup第二引数(RootType)にLcl_Programを指定
17MakeShortcut第一引数(RootPath)にLcl_Desktop,Lcl_Startmenu,Lcl_ProgramまたはLcl_Startupを指定
18DeleteShortcut第一引数(RootPath)にLcl_Desktop,Lcl_Startmenu,Lcl_ProgramまたはLcl_Startupを指定
19GetProcessCountなし
20GetProcessInfoなし
21TerminateProcessなし
注※1
第一引数(RegKey)にHKEY_LOCAL_MACHINE,第二引数(SubKey)の最初のキーにSoftwareを指定した場合,HKEY_CURRENT_USER¥Software¥Classes¥VirtualStore¥Machine¥Software下にリダイレクトされるためエラーになりません。RegWriteコマンドによってリダイレクトされたエントリはRegReadコマンドで優先して読み込まれます。
注※2
リダイレクトされたSoftware下の値を削除する場合,リダイレクト先のキーを指定する必要があります。
注※3
リダイレクトされたSoftware下のキーに対して実行した場合,キーは削除されません。

(2) ファイル操作系のコマンド

ファイル操作系のコマンドで,環境変数ProgramFilesおよびWinDirに設定されているフォルダ下のファイルに対して出力・更新した場合,ユーザごとの領域へリダイレクトされるときがあるので注意が必要です。リダイレクト先は環境変数LocalAppDataに設定されているパスのVirtualStore下になります。リダイレクトされる条件は,ファイル操作系のコマンドを実行するスクリプトファイルを標準ユーザで実行することです。リダイレクトされないためにはスクリプトファイルを管理者権限で実行しなければなりません。スクリプトファイルを管理者権限で実行する方法については「1.8.8 管理者権限での実行」を参照してください。

標準ユーザで実行したスクリプトファイルからファイル操作系コマンドで入力・参照した場合,リダイレクト先のファイルが優先して操作対象になります。

(3) Exec,NetExecコマンド

Exec,NetExecコマンドはInstall.exe,Setup.exeなどの管理者権限が必要な実行ファイルを呼び出すため,Exec,NetExecコマンドを実行するスクリプトファイルを標準ユーザから実行した場合,次の現象が発生します。

  1. Exec,NetExecコマンドが次のエラーになる。
    「0740:要求された操作には管理者特権が必要です。」
  2. 権限昇格の[ユーザアカウント制御]ダイアログが表示される。

通常は最初にExec,NetExecコマンドが1.のエラーになり,その後OSのプログラム互換アシスタント機能が動作して2.のダイアログが表示されます。

エラーおよびダイアログの表示を抑止したい場合は,スクリプトファイルを管理者権限で実行しなければなりません。スクリプトファイルを管理者権限で実行する方法については「1.8.8 管理者権限での実行」を参照してください。

権限昇格の[ユーザアカウント制御]ダイアログで[キャンセル]ボタンをクリックした場合,Exec,NetExecコマンドが次のエラーになります。

「1223:この操作はユーザーによって取り消されました。」

(4) TerminateProcessコマンド

他ユーザで実行中のプロセスは強制終了できません(スクリプトプロセスは強制終了できます)。他ユーザのプロセスを指定してもエラーにならないで正常終了します(存在しないプロセスを指定したときと同じ動作です)。

(5) GetProcessInfoコマンド

自ユーザで実行中のプロセス情報だけ取得できます。他ユーザで実行中のプロセスIDを指定した場合,アクセス拒否のエラーになります。また,サービス空間で実行中のスクリプトからログオン空間で実行中のプロセスIDを指定した場合もアクセス拒否のエラーになります。