「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- タスク = タスク・スケジューラ = Windowsサービスのため
「タスク・スケジューラもWindowsサービス」です。
- ココでは、Windowsサービスの下記、
実行コンテキスト周辺のトラブルシュートについて説明します。
- 一般ユーザのGUIから実行する場合、
- 一般ユーザのタスクとして実行すする場合
- 管理者権限のGUIから実行する場合
- 管理者権限のユーザのタスクとして実行する場合
サービス・タスク系の実行アカウントがデバッグ時と異なり、トラブる。
UACの問題で動かず、トラブる。
タスク スケジューラとUAC †
JP1の場合 †
- JP1/Automatic Job Management System 3 構築ガイド1
6.2.22 UAC機能有効時にAdministrators権限でジョブを実行するための設定
http://www.hitachi.co.jp/Prod/comp/soft1/manual/pc/d3S0532/AJSX0072.HTM
WindowsのUAC機能を有効にしていると,ビルトインAdministratorを除く,すべての
AdministratorsグループのOSユーザーは,Administrators権限が無効な状態で動作します。
JP1/AJS3では,Administrators権限を必要とするジョブ※が実行できなくなる場合があります。
・・・
「UAC機能有効時にAdministrators権限でジョブを実行するための設定」を有効
にすることによって,UAC機能が有効の場合でもAdministratorsグループの
OSユーザーでAdministrators権限が必要なジョブを実行できます。
ネットワークアクセス †
ネットワーク経由で、ファイル共有やプリンタにアクセスする場合。
帳票印刷 †
Windowsサービスやタスク スケジューラで帳票ツールを使用しないで印刷を行う推奨された方式はない。
選択肢 †
Word などを利用する †
- Office サーバー サイド オートメーションに該当しなければ良いので、
サーバ側にゲストOSを用意してログイン状態でログイン・アカウントから
Office オートメーションを実行すればこの問題には抵触しません。
- ただし、サーバ側にクライアントのゲストOSを用意する必要があるので
ソリューションや製品の既定の処理方式としては問題のように思います。
APIを使用する †
帳票ツールが出力するレベルを求めると難易度が高い。
また、帳票定義もないので開発・保守も難しくなる。
- .NET
.NETの印刷機能もサーバサイドでの利用は非推奨
PRB: エラー ASP ページから、または Windows サービスからの印刷時に
http://support.microsoft.com/kb/324565/ja
- サービスからの.NET Framework印刷クラスの使用はサポートされていません。
- 印刷するように設計されたすべてのサービスは、Win32 Api を直接使用する必要があります。
- Win32 API
C++ の知識が必要となる。文字だけであればそれほど難しくはない。
帳票ツールを使用する †
これが推奨だが、要件によってはオーバースペックで、費用もかかってくる。
一番安い Active Reportsで、開発者ライセンス=1、サーバライセンス=1 で20万円。
#カッチリしていない帳票→レポートなら、.NET同梱のReportViewerも使用できる。
帳票ツール †
OSS †
- NPOI
- Fisshplate.net
- EPPlus
Excel帳票 †
- ExcelCreator?
- ComponentOne? Studio
- ODBC
- Open XML SDK 2.0
- サーバーサイドにおける Open XML を利用したExcel ファイル
の自動生成方法(ExcelPackage? というOSSの紹介)
その他 †
その他 †
タスク・スケジューラの設定 †
設定可能な項目 †
参考情報 †
非対話型プロセス †
Windowsサービスやタスク スケジューラからの
UIを伴うWindowsアプリケーションの起動は推奨されない。
Windowsサービス †
以下のフォーラムのスレッドでは、非対話型プロセスで偽装ユーザを
対話ウインドウステーションに追加する方法を説明している。
- WinSta0\default は、コンソールへログインした
状態の desktop なので、条件が変わるかもしれません。
- 手を離してるか、
- スクリーンセーバになってるか、
- Winlogin の ログイン画面が出てるか
- このため、JP1 の KB にあった、
「デスクトップとの対話を有効にする方法」では、
WinSta0\defaultではなく、自前の desktop を作ってた、と思います。
- Terminal Service (Remote Desktop Service) が
有効になると、挙動が、がらっと変わり同じに動かない可能性もあります。
タスク スケジューラ †
バックグラウンドからのUIオートメーションはサポートされない。
従って、以下のように設定をして、フォアグラウンドで実行できるようにする。
- ログオン・ユーザの実行アカウントで実行させ、
- タスクスケジューラに以下の設定を行う。
- 「ユーザがログオンしている時のみ実行する。」にチェックを入れる
- 「操作の編集ダイアログ」の
- 「プログラム/スクリプト」に「cscript」を定義し、
- 「引数の追加」に「UIオートメーションを実行するVBScriptのパス」を指定する。
参考:
ユーザ・プロファイル †
ユーザ・プロファイルが無い場合にエラーとなるようなAPIは使用する事ができません。
この場合、必要に応じてユーザ・プロファイルをロードする必要があるようです。
該当する処理 †
以下の様な処理が該当します。
- My Documents、Desktop等
HOMEPATH=\Documents and Settings\ユーザ名
以下のディレクトリに含まれる情報
処理の例 †
ネットワーク ドライブの接続および切断を例にとると、
例えば、net use(WNetAddConnection?)
を使用してネットワーク・アクセスをすると、
Windowsの
- ファイル共有
- プリンタ共有
- ローカル・ドライブ
- ローカル・プリンタ
といったデバイスへのマッピングを覚えます。
しかし、これは、情報をプロファイルに覚えるので、
対話型ユーザでログオンしている必要があるようです。
Windowsサービスやタスク スケジューラの処理が、
ユーザ・プロファイルが存在しない実行カウントのコンテキスト上で実行される場合、
必要に応じてユーザ・プロファイルをロードします。詳しくはコチラをご参照下さい。
Office オートメーションをタスクスケジューラから実行しようとした場合に、
Office サーバー サイド オートメーション
の問題に合致するケースがあり得るので注意する必要があります。
.batはcmd.exeを経由します †
ので、標準入出力が用意されます。
- Windowsサービスやタスクスケジューラから直接起動されると、標準入出力が無い。
- 標準入力 が用意されないことで、動作がおかしくなるコマンドもあるようです。
Tags: :あるある, :Windows, :アカウント, :セキュリティ, :障害対応, :デバッグ