質問: タスクスケジューラプログラムは、%localappdata%という名前のリテラルフォルダに書き込みます microsoftの active directoryサービスインターフェイス (system.directoryservices.accountmanagement経由)を使用してldapクエリを実行する.net実行可能ファイル(作成したもの)があります。 adsiの内部では、 active directoryスキーマをダウンロードしてローカルに保存します 。このスキーマは%localappdata%\microsoft\windows\schcache\のフォルダに保存することになっています。この実行可能ファイルをwindowsserver 2012r2のタスクスケジューラでスケジュールし、「usera」として実行するように設定するとそのユーザーがログインしていなくても、プログラムは実行されますが、上記のキャッシュファイルをスケジュールされたタスクの start-in フォルダー内の文字通り%localappdata%\microsoft\windows\schcache\という名前のフォルダーに書き込もうとします(これは意図的に実行可能ファイルのフォルダに設定されています)。つまり、c:\myapp\%localappdata%\microsoft\windows\schcache\のようなものに書き込んでいます。プログラムを正しく実行するには、このフォルダーへの明示的な書き込み権限をuseraに付与する必要がありました。プロセスモニターでタスクのプロセスを監視しましたが、すぐにそのフォルダーに移動します。最初にc:\users\で何かを試みたが、失敗したわけではありません。自分のユーザーとしてサーバーにログインし、別のユーザーとして実行を使用して実行可能ファイルをuseraとして手動で実行すると、実行可能ファイルが実行され、キャッシュファイルがc:\users\usera\appdata\local\microsoft\windows\schcache\に正常に書き込まれます。これがタスクスケジューラで発生するのはなぜですか?それを修正するにはどうすればよいですか?タスクスケジューラがuseraのコンテキストでプログラムを実行しているが、環境変数として%localappdata%を初期化していないことに関係しているのではないかと思います。気まぐれで、タスクに最高の特権で実行を設定しようとしましたが、結果は変わりませんでした。
回答: これは、windows server 2012r2および8.1のバグです。 microsoftはそれを kb 296854 に文書化しています。問題が修正され、ホットフィックス kb 3133689 が利用可能になりました。この修正プログラムは問題を解決します。 ubpmを使用して実行されるスケジュールされたタスクには、対応するプロセスの開始時にappdata、userprofile、tempなどの十分な環境変数がありません。