質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

2回答

16252閲覧

バッチファイルをタスクスケジューラで起動時にイベントでのエラーが発生する原因の切り分けについて

DinKa

総合スコア40

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2016/03/29 05:20

編集2016/03/29 09:42

いつもお世話になっています、今回はWindowsServer2012でのエラーメッセージ(Application Error、.NET Runtime)について、教えてください。

###前提
2台のWindowsServer2012(仮想サーバーなので実質1台)に、SQLServer2014と、Webアプリをそれぞれ実装しています。
その中で、SQLServer側にタスクスケジューラとして、毎日帳票出力のバッチを起動するタスクがセットされています。
このタスクは毎日18時に起動して、トリガーされた後に、1時間ごとに無期限に繰り返します。
ただし、このタスクスケジューラは、毎時起動には成功しているようですが、バッチファイルが実行されていないように見えます。
イベントビューアーのログを見てみると、2016/03/25 0:00:00より毎時二つのエラーが発生していました。

レベル:エラー ソース:.NET Runtime イベントID:1026 タスクのカテゴリ:なし
レベル:エラー ソース:Application Error イベントID:1000 タスクのカテゴリ:(100)

なぜ、このタイミングからエラーによって失敗しているのかが分かりません。
原因の一つとして考えられるのは、前任者が前日(2016/03/24)に、
「自分がいなくなるからサーバーバッチ起動用のIDとパスを設定しておいたから」
という言葉が気になっています。
プログラム自体はその前日まで走っていたものなので、想定ではプログラムの方は問題ないはずです。

次際にタスク側を見てみると、
タスクの実行時に使うユーザーアカウントが、バッチ用のアカウントに変更されています。
(ユーザーがログオンしているかどうかにかかわらず実行する、パスワードを保存しないにチェックが入っています)

まず、何が問題なのかを切り分けようと思っているのですが、他のチェック項目を変更したり、
ユーザーアカウントを変更したりしても結果が変わりませんでした。

##実現したいこと
・どのような切り口で、問題を特定すればよいでしょうか?
・また、原因がプログラムで無い場合はどのように修正したらよろしいでしょうか?

前置きが無くなりましたが、よろしくお願いします

###発生している問題・エラーメッセージ

  • System

    • Provider

    [ Name] .NET Runtime

    • EventID 1026

    [ Qualifiers] 0

    Level 2

    Task 0

    Keywords 0x80000000000000

    • TimeCreated

    [ SystemTime] 2016-03-24T15:00:00.000000000Z

    EventRecordID 6342

    Channel Application

    Computer ServerName.xx.xxxx.com

    Security

  • EventData

    アプリケーション:Ap_BatchApp.exe フレームワークのバージョン:v4.0.30319 説明: ハンドルされない例外のため、プロセスが中止されました。例外情報:System.UnauthorizedAccessException スタック: 場所 System.IO.__Error.WinIOError(Int32, System.String) 場所 System.IO.File.InternalDelete(System.String, Boolean) 場所 System.IO.File.Delete(System.String) 場所 Ap_BatchApp.Utils.LogManager.SetUp() 場所 Ap_BatchApp.Program.Main(System.String[])

  • System

    • Provider

    [ Name] Application Error

    • EventID 1000

    [ Qualifiers] 0

    Level 2

    Task 100

    Keywords 0x80000000000000

    • TimeCreated

    [ SystemTime] 2016-03-24T15:00:01.000000000Z

    EventRecordID 6343

    Channel Application

    Computer ServerName.xx.xxxx.com

    Security

  • EventData

    Ap_BatchApp.exe
    1.0.0.0
    56cbfa20
    KERNELBASE.dll
    6.3.9600.17055
    532943a3
    e0434352
    00011d4d
    1be4
    01d185ddd669f45c
    C:\ApBatch\Ap_BatchApp.exe
    C:\Windows\SYSTEM32\KERNELBASE.dll
    1523eaf9-f1d1

###補足情報(言語/FW/ツール等のバージョンなど)
C#/ASP.NET Framework 4.5/ ASP.NET MVC 5.2.3/ VisualStudio Pro

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

情報:System.UnauthorizedAccessException

なんかの権限違反らしいっすね。

場所 System.IO.File.Delete(System.String)
場所 Apri_BatchApp.Utils.LogManager.SetUp()

ファイル削除で落ちてる?
LogManager.Setupってんだから昔のログファイルを消そうとしてる?
いずれにせよそこらへんのフォルダに対して今のユーザにアクセス権限あるかどうかを最初にチェックしてみては?

投稿2016/03/29 05:30

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DinKa

2016/03/29 08:00

お早いご回答ありがとうございます。 やはり権限違反なのですね。 まずは、権限に関して確認させていただきます。
DinKa

2016/03/30 06:15 編集

ありがとうございました、本番環境はフォルダのプロパティ→セキュリティ→編集でbatchのアカウントにアクセス許可(フルコントロール)を与えたところ、無事エラーなく完了しました。 開発環境では、別な管理者権限を持つアカウントが存在しており、そのアカウントでタスクを起動していますが、こちらが正常にバッチ処理が行えないのはまた別件のようです。 本番環境が修正できたので、開発環境は合間を見ながら確認してみます。 あとまだしっかり理解はできていないのですが、なぜ日が変わるタイミングで突如できなくなったのかがわかっていません。 この内容は正しくは理解できていませんが、おそらくタスクスケジュールが18時スタートではあるもの、前タスクの有効期限が無期限なので、日が変わるまではアカウントの更新がかからないということなのかなと、自分で推測してみました。 間違っていましたらご指摘いただけると幸いです。
guest

0

続報というか、他にも問題はありそうなので、追記しておきます。

・ファイルを直接編集・保存できない
バッチファイルの中身を調査し、内容に不適切な個所があったので、修正して保存しようとしたところ上書き保存ができませんでした。
理由:ファイルのデータオーナーが前任者になっていたため
対応方法:ファイルのプロパティ→セキュリティの詳細設定→変更で所有者を自身にしてOK
※これが正式な方法なのかはわかりませんが、自分はこれでできるようになりました

・エラーは出なくなったが、実行結果がエラーになるときがある
1時間ごとに起動するタスクスケジューラによって、バッチファイルを開始させていますが、タスク自体は実行されているものの、処理が正しく行われていないようです。
となると、やはりプログラム側(バッチファイルに限らず)が問題なのかなと思います。
手動でバッチを起動するときは実行結果は正しくなるのですが、昨日設定した夜間バッチは残念ながらエラーが帰ってきてしまってました。

投稿2016/03/30 02:10

編集2016/03/31 02:41
DinKa

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkturbo

2016/03/31 00:51

プログラミングとは関係ないですが、「前任者」からの引き継ぎがうまくいってないのは明白です。 「前任者」に連絡して質問してみるのが一番いい気がします。 # ここでの回答者はDinKaさんの業務内容ももろもろの環境や背景もわからないので。
DinKa

2016/03/31 02:24

前日のバッチでやはりエラーが出てしまったので調査しましたら、タスクスケジューラにおいて、最上位の特権で実行するにチェックを入れることで解消できました。 tkturboさん、ありがとうございます。 引き継ぎに関しては正直なところ「前任者」が全くやる気がなかったため、こうなることはある程度予測していました。 会社としても「前任者」を会社都合で職を解く以上、強くは言えなかったというのもありますが。 そういう意味でも、連絡して有効な回答を得るのはほぼ無理だと思ってます、残念なことではありますが。
DinKa

2016/04/05 02:03 編集

どうやらそう単純なことではなさそうでした。 自分で作った"最上位の特権で実行する"にチェックを入れたタスクは、しっかりexeファイルを実行して正常終了していましたが、前任者が作ったタスクに"最上位の特権で実行する"にチェックを入れた場合は、実行結果が異常終了していました(データをダウンロード時に失敗していることに気づきました)。 フォルダ、ファイルともに前任者が作ったアカウントにはフルコントロールの権限が与えましたので、また振出しに戻りました。 引き続き調査してみます。
tkturbo

2016/04/05 02:32

「実行結果が異常終了していました(データをダウンロード時に失敗」←これもイベントログから原因が探れるかもしれません。 対処療法になってしまいますが、一つずつ原因をつぶしていくしかありませんね。
DinKa

2016/04/05 06:23 編集

都度見ていただいてありがとうございます。 今回はイベントログにはエラーは出力されていませんでした。 つまりタスク自体は成功しているのだと思いますので、"最上位の特権で実行する"には意味はあったのだと思ってますが。 実行ファイルをそのままダブルクリックで実行すると、結果が異常終了しており、管理者権限で実行すると正常終了するので、権限に関する問題だとは思うのですが、まだ詰め切れてません。 ちなみに、タスクで実行したいexeファイルのプロパティで、互換性のところに"管理者としてこのプログラムをで実行する"にした場合、タスク自体が実行されませんでした(前回の実行結果の欄に、この操作には対話型のウィンドウステーションが必要ですと表示された、イベントログにはエラーなし)。
DinKa

2016/04/12 01:28 編集

前任者が作成したタスクの管理アカウントをbatchuser(標準ユーザー、グループ:Users)から、自分のアカウントDinKa(管理者、グループ:Administrators)に変更してみたら普通に実行できました。 実際にもう一度、batchuserのアカウントのグループを、PowerUsersやAdministratorsに変更してみて、タスクを実行してみましたがやはり実行で異常終了になります。 他にアカウント間の相違がある点があるとすれば、ドメイングループが違うぐらいでしょうか。うーん、難しいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問