「ネットワーク サービス」ユーザーの TEMP 環境変数を設定するにはどうすればよいですか?

「ネットワーク サービス」ユーザーの TEMP 環境変数を設定するにはどうすればよいですか?

Path.GetTempFile および Path.GetTempPath 呼び出しを使用して、一時ファイルを頻繁に操作するシステムがあります。このシステムも、「ネットワーク サービス」ユーザーとして実行されます。C ドライブの空き容量が不足していることがわかりました (他の問題として、一時ファイルは適切にクリーンアップされています)。そのため、一時ディレクトリを別のドライブに移動できるようにしたいと考えています。

この問題の最も簡単な解決方法は、ネットワーク サービス ユーザーの TMP または TEMP 環境変数を変更することのようですが、自分のユーザーまたはネットワーク サービス ユーザー プロファイルによって上書きされる「システム」変数しか設定できないようです。ネットワーク サービス ユーザーに対してこれらの変数を設定するにはどうすればよいでしょうか。

答え1

実際にはかなり難しいです。setxコマンドを使用して他のユーザーの永続的な環境変数を設定することはできますが、サービス アカウントにはパスワードがないため、NetworkService では機能しません (そのため、資格情報は常に拒否されます)。

私が知っている限り、これを行う唯一の方法は、タスク スケジューラを使用することです。

  1. ユーザー「ネットワーク サービス」として実行するタスクを設定します。
  2. トリガーは空のままにしておきます。
  3. アクションについては、cmd.exeパラメータを使用して実行します/c setx temp [target]
  4. タスクを手動で実行します。
  5. タスクを削除します。

これにより、NetworkService ユーザーの永続的な環境変数が設定されます。これにより、そのユーザーの一時ファイルの再配置が正常に機能するかどうか、または予期しない副作用が発生するかどうかについては、断言できません。一時ファイルが目的の場所に配置されているかどうかを確認するには、再起動が必要になる場合があります。

environmentWMIC 内のコマンドを使用して、環境変数が正しいユーザーに対して変更されたことを確認できます。

答え2

アカウントの環境変数はNetwork ServiceWindows レジストリに保存され、regedit で変更できますHKEY_USERS\S-1-5-20\Environment

関連情報