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

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

* 目次 [#d9b690d4]
#contents

*概要 [#p7f2044e]
タスク = タスク・スケジューラ = Windowsサービスのため

-タスク = タスク・スケジューラ = Windowsサービスのため
>「タスク・スケジューラもWindowsサービス」です。

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

*アカウント関係 [#nda88705]
*詳細 [#lb5dcacb]

-通常、Windowsサービスの実行アカウントとして~
[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]が使用されます。
**[[WOW64関係>WOW64]] [#f57d047b]
-何気に、[[WOW64]]問題のケースもある。
-[[JP1/AJSのクライアントが32bitと言うケース。>WOW64#pdd723e0]]

--IISでは、「Network Service」を使用します。
--タスク スケジューラでは、「System」(LocalSystem)を使用します。
**[[アカウント関係>サービス・タスク系のアカウント問題]] [#nda88705]
サービス・タスク系の実行アカウントがデバッグ時と異なり、トラブる。

-このため、Windowsサービスやタスク スケジューラからの実行では、~
普段意識していないOSやAPIの認証機構の存在を意識する必要があります。
**権限関係([[UAC]]) [#r36372ef]
[[UAC]]の問題で動かず、トラブる。

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

**runasコマンド実行アカウントを指定する(アンマッチ) [#z81fe89c]
runasコマンドで一時的にほかのユーザー権限でプログラムを実行する事ができますが、~
コマンドからパスワードは与えられず、ユーザに入力を求めるダイアログが表示されますので~
非対話型のセッションから実行されるWindowsサービスやタスク スケジューラではアンマッチです。

-一時的にほかのユーザー権限でプログラムを~
実行する方法(runasコマンドを利用する方法) - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/758runascmd/runascmd.html

**タスク スケジューラの実行アカウントを指定する [#l35dae4c]

***タスク スケジューラの機能を使用する [#v72ed448]
以下のKBにあるように、タスク スケジューラは実行アカウントを指定して実行させる事ができます。

-ユーザー アカウントにパスワードがないとタスク スケジューラでタスクが実行されない~
http://support.microsoft.com/kb/299854/ja

コマンドからは以下の様に設定します。

-TechNet

--Command-line Reference > A-Z List
---Atコマンド~
http://technet.microsoft.com/ja-jp/library/cc772590.aspx
---Schtasksコマンド~
http://technet.microsoft.com/ja-jp/library/cc725744.aspx

--タスクのセキュリティ コンテキスト~
http://technet.microsoft.com/ja-jp/library/cc722152.aspx

***タスクスケジューラに特権を付与する [#kd037fc9]
[[こちら>#q768b5c5]]を参照して下さい。

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

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

参考:

-タスクスケジューラでvbsを実行した時、起動したソフトが最前面… - 人力検索はてな~
http://q.hatena.ne.jp/1373728119

**Windowsサービスの実行アカウントを指定する [#a212352c]

***IISやSQL Serverなど [#ib21db08]
IIS(のワーカ・プロセス)やSQL Serverなど、~
専用の設定画面を持ち、ここから設定が可能です。

-IIS
--IIS7.5(のワーカ・プロセス)からは、アプリケーションプール IDが導入され、~
既定で「[[Network Service>ビルトイン システム アカウント]]」ではなく「[[DefaultAppPool>仮想アカウント]]」が使用されます。

--IIS 7 のアクセス許可~
http://awoni.net/tips/iis_acl/

|BGCOLOR(#cccccc):||||c
||Windows Server 2003|Windows Vista&br;Windows Server 2008|Windows 7/Vista sp2&br;Windows Server 2008 R2|h
|既定の匿名ユーザーID|IUSR_<マシン名>|IUSR|IUSR|
|既定のワーカープロセスID|NETWORK SERVICE|NETWORK SERVICE|アプリケーション プール ID&br;([[仮想アカウント]])|
|ワーカープロセスグループ|IIS_WPG|IIS_IUSRS|IIS_IUSRS|

--アプリケーション プール IDの権限設定をする場合、~
IIS_AppPool\ApplicationPoolNameユーザか、IIS_IUSRSグループに対して権限を設定する。
>IIS 7 以降でのアプリケーションプールと権限について調べた - しばやん雑記~
http://blog.shibayan.jp/entry/20150127/1422369253

-SQL Server
--SQL Server インストールのセキュリティに関する注意点~
http://msdn.microsoft.com/ja-jp/library/ms144228.aspx
--サーバーの構成 - サービス アカウント~
http://msdn.microsoft.com/ja-jp/library/cc281953.aspx
--SQL Server のサービス開始アカウントの変更 (SQL Server 構成マネージャー)~
http://msdn.microsoft.com/ja-jp/library/ms345578.aspx

***ASP.NET(偽装) [#p4f563b8]
ASP.NETでは、偽装を使用する事によって、~
実行アカウントを指定することもできます。

>ASP.NET アプリケーションに偽装を実装する方法~
http://support.microsoft.com/kb/306158/ja

偽装には、

-[[サーバ信頼セキュリティ モデル]]
>特定のアカウントに偽装する。

-[[ベース クライアント セキュリティ モデル]]
>Windowsサービスにアクセスしてきたユーザの認証アカウントに偽装する。

があります。

匿名アカウントを実行アカウントにする場合は偽装が必要になります。~
通常は、IIS(のワーカ・プロセス)の実行アカウントで実行される。

-@IT:連載:プログラミングASP.NET 第17回 ASP.NETにおける認証と認定~
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet17/aspnet17_03.html~

***APIを使用した偽装 [#cd724f4b]
ASP.NETのように、偽装の機能が実装されているWindowsサービスも有りますが、~
Win32APIを使用して偽装することもできます(区間的、部分的な偽装)。


-参考
--ASP.NET アプリケーションに偽装を実装する方法~
http://support.microsoft.com/kb/306158/ja
--コード内で認証中のユーザーを偽装する 
--コード内で特定のユーザーを偽装する 

--[[Open棟梁のIdentityImpersonation.ImpersonateValidUser+UndoImpersonationメソッド>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Util/IdentityImpersonation.cs#L144]]
---[[区間偽装のサンプル - Open 棟梁 Wiki>http://opentouryo.osscons.jp/index.php?%E5%8C%BA%E9%96%93%E5%81%BD%E8%A3%85%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB]]

**WindowsサービスからEXEを起動 [#q966b069]
***偽装スレッドからEXEを起動 [#a44cbeac]
また、ASP.NETなどの偽装スレッドからEXE起動をした場合、~
EXEが偽装スレッドの実行アカウントで実行されない問題があります。

-Microsoft ASP.NET で偽装ユーザーの~
コンテキストで実行されるプロセスを生成する方法。~
http://support.microsoft.com/kb/889251/ja
>偽装ユーザーのコンテキストで実行されるプロセスを起動するのには、 ~
System.Diagnostics.Process.Startメソッドを使用できません。

偽装スレッドの実行アカウントでEXEを起動する場合は、~
DuplicateTokenEx→CreateProcessAsUser関数を使用し、~
独自に、ユーザ権限を割り当てる必要があるようです。

以下の点に注意が必要のようです。

-ASP.NET偽装や、ImpersonateValidUserの偽装レベルは~
SecurityImpersonationなので、これに合わせる必要がある。

-独自偽装の、偽装レベルは、どちらでも良いが、双方を合わせる必要がある。
--SecurityImpersonation
--SecurityDelegation

-実行アカウントには、以下の設定が必要になる。

--「プロセス レベル トークンの置き換え」セキュリティ・ポリシー~
このセキュリティ設定は、あるWindowsサービスから別のWindowsサービスを開始するために、~
CreateProcessAsUser() Win32APIを呼び出せるユーザ アカウントを決定します。~
このユーザー権利を使用するプロセスの 1 つがタスク スケジューラです。

---既定値:Network Service、Local System

-参考情報
--CreateProcessAsUser  すなのかたまり~
http://msmania.wordpress.com/tag/createprocessasuser/
---[Win32] [C++] LogonUser と CreateProcessAsUser  すなのかたまり~
http://msmania.wordpress.com/2011/02/06/win32-c-logonuser-%e3%81%a8-createprocessasuser/
---[Win32] [C++] CreateProcessAsUser  #1 特権編  すなのかたまり~
http://msmania.wordpress.com/2011/12/31/win32-c-createprocessasuser-1-%E7%89%B9%E6%A8%A9%E7%B7%A8/
---[Win32] [C++] CreateProcessAsUser  #2 トークン編  すなのかたまり~
http://msmania.wordpress.com/2011/12/31/win32-c-createprocessasuser-2-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E7%B7%A8/
---[Win32] [C++] CreateProcessAsUser  #3 ソース  すなのかたまり~
http://msmania.wordpress.com/2011/12/31/win32-c-createprocessasuser-3-%E3%82%BD%E3%83%BC%E3%82%B9/
---[Win32] [C++] CreateProcessAsUser  #4 セキュリティ記述子  すなのかたまり~
http://msmania.wordpress.com/2012/01/01/win32-c-createprocessasuser-4-%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E8%A8%98%E8%BF%B0%E5%AD%90/

--[[Open棟梁のIdentityImpersonation.CreateProcessAsImpersonationUserメソッド>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Util/IdentityImpersonation.cs#L283]]

***「ブロックの解除」がされていないEXEを起動 [#y1ddd003]
サービスから「ブロックの解除」がされていないEXEを実行しようとすると失敗する。

-Tech TIPS:Windows 10で、ダウンロードしたファイルのブロック設定を解除する - @IT~
http://www.atmarkit.co.jp/ait/articles/1603/11/news050.html

**コンピューター スタートアップ スクリプトの実行アカウント [#le4b1c98]
スタートアップ スクリプトは Local System アカウントとして実行されるらしい。

-コンピューター スタートアップ スクリプトを割り当てる~
https://technet.microsoft.com/ja-jp/library/cc770556.aspx

**実行アカウントの確認方法 [#hda848ff]
***.NET [#e41e7e38]
以下を参照下さい。

-@IT:.NET TIPS ユーザーのセキュリティ権限を確認するには?(基本編)~
http://www.atmarkit.co.jp/fdotnet/dotnettips/346rolebasesec1/rolebasesec1.html

*権限 [#p8e677d7]
**UAC [#r36372ef]
UACの問題で動かないようなケースもパニックです。

Windowsのユーザー・アカウント制御(UAC)を一時的に無効にする - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/859disuac/disuac.html
>UACとは、Windows Vista以降のOSに実装されている~
ユーザー・アカウント制御(User Account Control)を指す。

***タスク スケジューラと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/Automatic Job Management System 3 構築ガイド1~

-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]
ネットワーク経由で、ファイル共有やプリンタにアクセスする場合。

**[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]の問題 [#e8853015]
-タスクの実行には、[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]が使用される事が多いです。
-しかし、[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]を使用するとネットワーク間で認証できません。
-[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]はADのグループに入れる事ができないのでAD環境下でもNGです。
***[[ネットワーク間認証の問題>サービス・タスク系のアカウント問題#faa96fc2]]の問題 [#e8853015]

一般的に匿名アクセスを許可する以外、
***[[リモート・コマンドと実行アカウントの考慮>サービス・タスク系のアカウント問題#g35786fe]] [#t3e06d55]

ネットワーク間の認証には~

-[[ミラーアカウント]]か、
-[[ドメイン アカウント]]を
-[[net use(WNetAddConnection)>#aec9f79c]]

を使用する必要があります。

-[[ミラーアカウント]]~
WORKGROUP環境で利用。

-[[ドメイン アカウント]]~
Active Directory環境で利用。
--コンピュータ・アカウント~
AD環境下の場合、[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]を使用する場合、~
[[コンピュータ・アカウント>ドメイン アカウント#fdd7575b]]のアクセス許可をリソースに付与するだけでも良い。
--仮想アカウント~
AD環境下の場合、[[仮想アカウント]]は自動的に管理され、~
ドメイン環境でネットワークにアクセスすることができる。

-[[net use(WNetAddConnection)>#aec9f79c]]~
WORKGROUP環境・Active Directory環境でも利用可能。

**リモート・コマンド [#v73746d8]
-RSH(rshsvcサービス)や
-PowerShell(WinRMサービス)で

リモート・コマンドを実行する場合、~
リモートでコマンドを実行する際の~
実行アカウントを考慮する必要があります。

***RSH [#j2c36322]
rshsvc.exeは、渡されたシェルを実行しますが、シェルの実行アカウントは、~
[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]であるLocal Systemとなるようです。

***WinRM [#od280807]
WinRMサービスは、渡されたPowerShellを実行しますが、PowerShellの実行アカウントは、~
[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]であるNetwork Serviceとなるようです。~

しかし、WinRMサービスは実行時にCredentialを渡す事で実行アカウントを指定でき、~
また、色々設定を行う事によってWinRMではダブルホップも可能であるようです。~

***PsExec [#a18ceed3]
RSH(rshsvcサービス)など、上記の実行アカウントで~
実行できないコマンドをリモート実行したい場合、PsExecが利用できる。

-リモート・コンピュータ上でプログラムを実行する(PsExec編) - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/1416psexec/psexec.html~

--ローカル・アカウントと同じ資格情報得で偽装しリモート・タスクを実行する。~
ただし、この偽装アカウントはダブルホップ問題を持つため適切な設定が無いと~
リモート・タスク上のネットワーク・アクセス時の認証等に失敗する。

--リモートで実行するときのアカウントを指定できる。

--Systemアカウントでプログラムを実行するよう指定できる。

***参考情報 [#r02409ee]
ローカルの実行アカウントを引き継いでリモートアクセスする場合に知っておきたい~
「ダブルホップ」については「[[ベース クライアント セキュリティ モデル]]」→「[[委任]]」を参照。

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

**選択肢 [#yceaf61a]

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

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

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

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

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

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

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

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

---プリンタプログラミング (その1)~
--プリンタプログラミング (その1)~
http://www30020u.sakura.ne.jp/nohito/program/memo/lecture/printer-1.html
---プリンタを利用する (その2)~
--プリンタを利用する (その2)~
http://www30020u.sakura.ne.jp/nohito/program/memo/lecture/printer-2.html
---プリンタを利用する (その3)~
--プリンタを利用する (その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)~
を使用してネットワーク・アクセスをすると、
--例えば、net use(WNetAddConnection)~
を使用してネットワーク・アクセスをすると、~
Windowsのデバイスへのマッピングを覚えます。
---ファイル共有
---プリンタ共有
---ローカル・ドライブ
---ローカル・プリンタ

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

といったデバイスへのマッピングを覚えます。

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

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

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

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

**[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]で実行 [#b599750e]
[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]でプログラムを実行しようとしても、~
runasコマンドには[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]を指定きません。~

-参考:[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]

この場合、「System」(LocalSystem)であれば、~
タスク スケジューラが既定で、「System」(LocalSystem)の~
[[サービスで使用されるビルトイン システム アカウント>ビルトイン システム アカウント#w367092e]]を使用する性質を利用できます。

-一時的にSystemアカウントでプログラムを実行する - @IT~
http://www.atmarkit.co.jp/fwin2k/win2ktips/1165atsys/atsys.html~

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

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

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

**タスク・スケジューラの設定 [#g66ace73]
***設定可能な項目 [#h0bd3e85]
-実行アカウント(前述)
**[[.bat>BAT]]はcmd.exeを経由します [#ccb7761d]
ので、標準入出力が用意されます。

-UACが有効な場合、Administratorsグループ権限の付与
--[最上位の特権で実行する]チェック ボックスをオンに設定
-Windowsサービスやタスクスケジューラから直接起動されると、標準入出力が無い。
-標準入力 が用意されないことで、動作がおかしくなるコマンドもあるようです。

-作業フォルダ
--[Windows]タスクスケジューラで作業フォルダを指定する方法  DelightMode~
http://www.delightmode.jp.net/win-taskscheduler.html
----
Tags: [[:あるある]], [[:Windows]], [[:アカウント]], [[:セキュリティ]], [[:障害対応]], [[:デバッグ]]

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

**.batはcmd.exeを経由します。 [#ccb7761d]

-ので、標準入出力が用意されます。

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

-以下レジストリが設定されていますと、~
bat起動前に設定されているプログラムが実行され、思わぬ動きとなります。
--HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
--HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun

--コマンドプロンプトを起動させた時に、~
バッチスクリプトが自動で実行されるのを止めたいです。 - マイクロソフト コミュニティ~
http://answers.microsoft.com/ja-jp/windows/forum/windows_7-windows_programs/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97/c00bd58b-efd0-4a50-99be-2f6291ed2aa4?msgId=604ae0c6-5e5e-4461-94c4-6a9ddca800b8


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