「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[Windows]]
-[[戻る>Windows OSの基礎的トピック]]
--[[SCM]]
--[[アカウント]]
--[[あるある]]

* 目次 [#d9b690d4]
#contents

*概要 [#p7f2044e]
-タスク = タスク・スケジューラ = Windowsサービスのため
>「タスク・スケジューラもWindowsサービス」です。

-ココでは、Windowsサービスの下記、~
実行コンテキスト周辺のトラブルシュートについて説明します。
--一般ユーザのGUIから実行する場合、
--一般ユーザのタスクとして実行すする場合
--管理者権限のGUIから実行する場合
--管理者権限のユーザのタスクとして実行する場合

*[[アカウント関係>サービス・タスク系のアカウント問題]] [#nda88705]
*詳細 [#lb5dcacb]

**[[WOW64関係>WOW64]] [#f57d047b]
-何気に、[[WOW64]]問題のケースもある。
-[[JP1/AJSのクライアントが32bitと言うケース。>WOW64#pdd723e0]]

**[[アカウント関係>サービス・タスク系のアカウント問題]] [#nda88705]
サービス・タスク系の実行アカウントがデバッグ時と異なり、トラブる。

*権限関係([[UAC]]) [#r36372ef]
**権限関係([[UAC]]) [#r36372ef]
[[UAC]]の問題で動かず、トラブる。

**タスク スケジューラと[[UAC]] [#q768b5c5]
***タスク スケジューラと[[UAC]] [#q768b5c5]

-タスクのセキュリティ コンテキスト~
http://technet.microsoft.com/ja-jp/library/cc722152.aspx~
>タスク スケジューラのセキュリティ コンテキストに対して Administrators グループを使用してタスクが登録されている場合、~
タスクを実行するには、[最上位の特権で実行する] チェック ボックスがオンになっていることも確認する必要があります。

-Windows10 - 管理者権限が必要なアプリを自動起動(スタートアップ) - PC設定のカルマ~
https://pc-karuma.net/windows-10-task-schedule-without-uac-prompt/

**JP1の場合 [#b010e297]
***JP1の場合 [#b010e297]

-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権限が必要なジョブを実行できます。~

*ネットワークアクセス [#h3eb0eb4]
**ネットワークアクセス [#h3eb0eb4]
ネットワーク経由で、ファイル共有やプリンタにアクセスする場合。

**[[ネットワーク間認証の問題>サービス・タスク系のアカウント問題#faa96fc2]]の問題 [#e8853015]
***[[ネットワーク間認証の問題>サービス・タスク系のアカウント問題#faa96fc2]]の問題 [#e8853015]

**[[リモート・コマンドと実行アカウントの考慮>サービス・タスク系のアカウント問題#g35786fe]] [#t3e06d55]
***[[リモート・コマンドと実行アカウントの考慮>サービス・タスク系のアカウント問題#g35786fe]] [#t3e06d55]

*帳票印刷 [#m80b5499]
Windowsサービスやタスク スケジューラで帳票ツールを使用しないで印刷を行う推奨された方式はない。

**選択肢 [#yceaf61a]

***Word などを利用する [#if8ceb7d]

-[[Office サーバー サイド オートメーション]]はマイクロソフトの非推奨

-一部、裏技的な方法もある。~
同じフォルダーにあるファイルのグループを印刷するマクロ~
http://support.microsoft.com/kb/107880/ja

--Office サーバー サイド オートメーションに該当しなければ良いので、~
サーバ側にゲストOSを用意してログイン状態でログイン・アカウントから~
Office オートメーションを実行すればこの問題には抵触しません。

--ただし、サーバ側にクライアントのゲストOSを用意する必要があるので~
ソリューションや製品の既定の処理方式としては問題のように思います。

***APIを使用する [#ue0a71e1]
帳票ツールが出力するレベルを求めると難易度が高い。~
また、帳票定義もないので開発・保守も難しくなる。

-.NET~
.NETの印刷機能もサーバサイドでの利用は非推奨~
PRB: エラー ASP ページから、または Windows サービスからの印刷時に~
http://support.microsoft.com/kb/324565/ja~
--サービスからの.NET Framework印刷クラスの使用はサポートされていません。
--印刷するように設計されたすべてのサービスは、Win32 Api を直接使用する必要があります。

-Win32 API~
C++ の知識が必要となる。文字だけであればそれほど難しくはない。

--プリンタプログラミング (その1)~
http://www30020u.sakura.ne.jp/nohito/program/memo/lecture/printer-1.html
--プリンタを利用する (その2)~
http://www30020u.sakura.ne.jp/nohito/program/memo/lecture/printer-2.html
--プリンタを利用する (その3)~
http://www30020u.sakura.ne.jp/nohito/program/memo/lecture/printer-3.html

***帳票ツールを使用する [#ab2e736f]
これが推奨だが、要件によってはオーバースペックで、費用もかかってくる。~
一番安い Active Reportsで、開発者ライセンス=1、サーバライセンス=1 で20万円。~
#カッチリしていない帳票→レポートなら、.NET同梱のReportViewerも使用できる。

**帳票ツール [#g555f2de]

***OSS [#w5a472bd]
-NPOI
-Fisshplate.net
-EPPlus

***Excel帳票 [#xfcf2809]
-ExcelCreator
-ComponentOne Studio
-ODBC
-Open XML SDK 2.0

-support.microsoft.com

--ADO を使用して Excel ブックのデータの~
読み取りおよび書き込みを行う方法 (ExcelADO)~
http://support.microsoft.com/kb/278973/ja~

--Visual Basic .NET と ADO.NET を使用して~
Excel ブックのレコードの取得と変更を行う方法~
http://support.microsoft.com/kb/316934/ja~

-サーバーサイドにおける Open XML を利用したExcel ファイル~
の自動生成方法(ExcelPackage というOSSの紹介)

--(その1)~
http://crieilluminate.wordpress.com/2009/06/02/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B-open-xml-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9Fexcel-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB-2/

--(その2)~
http://crieilluminate.wordpress.com/2009/06/02/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B-open-xml-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9Fexcel-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/~

**その他 [#sd0b5b14]

-SharePoint

--SharePoint 2010 を使うと、サーバ側で、Word を pdf に変換できるらしい。
---Word Automation Services の概要~
http://msdn.microsoft.com/ja-jp/library/ee558830.aspx

--SharePoint 2013 では、 PowerPoint も pdf 変換できるらしい。
---PowerPoint 2013 新機能 Overview (SharePoint 連携)~
http://crieilluminate.wordpress.com/2012/10/10/powerpoint-2013-preview-%E6%96%B0%E6%A9%9F%E8%83%BD-overview-sharepoint-%E9%80%A3%E6%90%BA/

-Windows Live SkyDrive で Office Web Apps を使用する~
http://office.microsoft.com/ja-jp/web-apps-help/HA101231889.aspx
--SkyDrive 使うと、Word を pdf に変換できる

*その他 [#gda83bf4]

**タスク・スケジューラの設定 [#g66ace73]

***設定可能な項目 [#h0bd3e85]
-[[実行アカウントの指定>#nda88705]]

-[[UACが有効な場合、Administratorsグループ権限の付与>#q768b5c5]]

-作業フォルダ
--[Windows]タスクスケジューラで作業フォルダを指定する方法  DelightMode~
http://www.delightmode.jp.net/win-taskscheduler.html

***参考情報 [#me82fda6]
--タスク スケジューラの概要~
http://technet.microsoft.com/ja-jp/library/cc721871.aspx
---タスク スケジューラのトラブルシューティング~
http://technet.microsoft.com/ja-jp/library/cc721846.aspx

**非対話型プロセス [#p5c3a582]
Windowsサービスやタスク スケジューラからの~
UIを伴うWindowsアプリケーションの起動は推奨されない。

***Windowsサービス [#v4b35fda]
以下のフォーラムのスレッドでは、非対話型プロセスで偽装ユーザを~
対話ウインドウステーションに追加する方法を説明している。

-C#のWindowsサービスからのProcessによるEXE起動について - Insider.NET - @IT~
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32959&forum=7

-補足

--WinSta0\default は、コンソールへログインした~
状態の desktop なので、条件が変わるかもしれません。
---手を離してるか、
---スクリーンセーバになってるか、
---Winlogin の ログイン画面が出てるか

--このため、JP1 の KB にあった、~
「デスクトップとの対話を有効にする方法」では、~
WinSta0\defaultではなく、自前の desktop を作ってた、と思います。~

--Terminal Service (Remote Desktop Service) が~
有効になると、挙動が、がらっと変わり同じに動かない可能性もあります。

***タスク スケジューラ [#b95a97b8]
バックグラウンドからのUIオートメーションはサポートされない。~
従って、以下のように設定をして、フォアグラウンドで実行できるようにする。

-ログオン・ユーザの実行アカウントで実行させ、
-タスクスケジューラに以下の設定を行う。
--「ユーザがログオンしている時のみ実行する。」にチェックを入れる
--「操作の編集ダイアログ」の
---「プログラム/スクリプト」に「cscript」を定義し、
---「引数の追加」に「UIオートメーションを実行するVBScriptのパス」を指定する。

参考:

-タスクスケジューラでvbsを実行した時、起動したソフトが最前面… - 人力検索はてな~
http://q.hatena.ne.jp/1373728119
-Windows10 - 管理者権限が必要なアプリを自動起動(スタートアップ) - PC設定のカルマ~
https://pc-karuma.net/windows-10-task-schedule-without-uac-prompt/

**ユーザ・プロファイル [#e6fe2f00]
ユーザ・プロファイルが無い場合にエラーとなるようなAPIは使用する事ができません。~
この場合、必要に応じてユーザ・プロファイルをロードする必要があるようです。~

***該当する処理 [#nbfd2dbb]
以下の様な処理が該当します。

-レジストリのHKEY CURRENT USER

-My Documents、Desktop等~
HOMEPATH=\Documents and Settings\ユーザ名~
以下のディレクトリに含まれる情報

-ネットワーク ドライブの接続および切断

-.etc
--ユーザー プロファイルに保存される設定~
http://technet.microsoft.com/ja-jp/library/cc781142.aspx

***処理の例 [#aec9f79c]
-デバイスへのマッピング~
ネットワーク ドライブの接続および切断を例にとると、

--例えば、net use(WNetAddConnection)~
を使用してネットワーク・アクセスをすると、~
Windowsのデバイスへのマッピングを覚えます。
---ファイル共有
---プリンタ共有
---ローカル・ドライブ
---ローカル・プリンタ

--これは、情報をプロファイルに覚えるので、~
対話型ユーザでログオンしている必要があるようです。

--参考
---Windows XP でネットワーク ドライブの接続および切断を行う方法~
http://support.microsoft.com/kb/308582/ja
---C#でのWNetAddConnection3の使い方を教えてください~
その他(プログラミング) 解決済 | 教えて!goo~
http://oshiete.goo.ne.jp/qa/4423732.html

-必要に応じてユーザ・プロファイルをロード~
Windowsサービスやタスク スケジューラの処理が、
>「ユーザ・プロファイルが存在しない~
実行カウントのコンテキスト上で実行される」

>場合、必要に応じてユーザ・プロファイルをロードします。~
→ ユーザ・プロファイルをロードする方法の詳細は[[コチラ>Office サーバー サイド オートメーション#y12437e8]]をご参照下さい。

**[[Office サーバー サイド オートメーション]] [#t6f474b4]
Office オートメーションをタスクスケジューラから実行しようとした場合に、

>[[Office サーバー サイド オートメーション]]

の問題に合致するケースがあり得るので注意する必要があります。

**[[.bat>BAT]]はcmd.exeを経由します [#ccb7761d]
ので、標準入出力が用意されます。

-Windowsサービスやタスクスケジューラから直接起動されると、標準入出力が無い。
-標準入力 が用意されないことで、動作がおかしくなるコマンドもあるようです。

----
Tags: [[:あるある]], [[:Windows]], [[:アカウント]], [[:セキュリティ]], [[:障害対応]], [[:デバッグ]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS