tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルWIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12016
投稿日: 2020/03/04(Wed) 18:43
投稿者各務
始めまして、よろしくお願いいたします。

サーバー上でEXEを直接起動すると正常に動作するのですが、タスクスケジュラーに登録し自動実行にするとフリーズしてしまいます。
サーバー上でEXCELを使用する事は、あまり推奨されていないことは承知しているのでが、必用に迫られ行っております。


開発環境:VB.NET 2005
実行環境:WINDOWS2012サーバー + タスクスケジューラーで実行(BATファイル)


エクセルは下記にて定義
Imports Excel = Microsoft.Office.Interop.Excel


フリーズする部分はブックを開く
xlBook = xlBooks.Open( --  EXCELファイル名 -- )

表では実行できるので、パスが通っていないという事は無いと考えます。
ちなみにWIN2008サーバー上では動作しており、WIN2012に移行したら動かなくなりました。
プログラムの問題では無く、OS上のセキュリティ関連の変化によるものと推測するのですが、解決の糸口がつかめません。
もし、糸口だけでもご存知であればご教授いただきたく、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12017
投稿日: 2020/03/04(Wed) 19:35
投稿者Hongliang
フリーズというのは具体的にどういう症状でしょうか。
その症状が発生したときの時刻で、イベントログに何か出ていませんか。
タスクスケジューラで、セキュリティオプションの設定はどうなっていますか(実行ユーザやログオン回りなど)。

ご参考
hhttps://support.microsoft.com/ja-jp/help/257757/considerations-for-server-side-automation-of-office

[ツリー表示へ]
タイトルRe^2: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12018
投稿日: 2020/03/05(Thu) 08:49
投稿者各務
Hongliang様、早速の対応ありがとうございます。


> フリーズというのは具体的にどういう症状でしょうか。
EXCELブックを開く
xlBook = xlBooks.Open( --  EXCELファイル名 -- )
の部分で、進まなくなります。
上記命令の前後に、テキストログを吐き出すルーチンを入れており、xlBooks.Open前まではログに吐き出されています。
このログを根拠に、この部分でフリーズしていると判断いたしました。



> その症状が発生したときの時刻で、イベントログに何か出ていませんか。
特に確認はできませんでした。


> タスクスケジューラで、セキュリティオプションの設定はどうなっていますか(実行ユーザやログオン回りなど)。

実行ユーザーは、ドメインのadministrator で実行しています。
また、以下にレ点を入れていおります。
・ログインしているかどうかにかかわらず実行する 
・最上位の特権で実行する


>
> ご参考
> hhttps://support.microsoft.com/ja-jp/help/257757/considerations-for-server-side-automation-of-office
情報ありがとうござます。確認いたします。


以上、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12019
投稿日: 2020/03/06(Fri) 10:25
投稿者魔界の仮面弁士
> 実行ユーザーは、ドメインのadministrator で実行しています。
> ・最上位の特権で実行する

実運用でそれだと強すぎるのでマズいですが、
問題の切り分けのために、一時的に強い権限でテストするのはアリですね。


その Administrator のデスクトップセッションで Excel を起動した際、
[ファイル]-[アカウント]で、ユーザーに対するライセンス認証が完了しており、
かつ、更新プログラムも適用済みになっているでしょうか?

一度もデスクトップセッションで実行していない場合、一時フォルダーの設定などが不足していたり、
Office のライセンス認証のところで躓いてしまっていたりする可能性があります。


また、Office はストアアプリ版ではなく、デスクトップアプリ版になっているでしょうか?
オートメーション操作が必要な場合にはストアアプリ版はお奨めしません。


もう一つ、今回は Server 2012 とのことですが、Server 2008/Vista 以降の OS においては、
「タスクスケジューラ」画面から追加したタスクが、通常の優先度ではなく
低(priority = 7)でセットされるようになっています。
hhttps://docs.microsoft.com/ja-jp/windows/win32/taskschd/tasksettings-priority

Office は通常優先度で動作させることを想定して設計されているでしょうから、
もしも低優先度になっている場合は、設定を見直しておいた方が良いと思います。
hhttps://qiita.com/fjtter/items/a0ad8b08f2f1a6c66f7a

なお、現在実行中のプロセスの優先度は、タスクマネージャーの詳細タブにて
[基本優先度]列を表示させることで確認できます。

[ツリー表示へ]
タイトルRe^4: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12020
投稿日: 2020/03/09(Mon) 08:26
投稿者各務
魔界の仮面弁士 様

お世話になっております。 返事が遅くなりすみません。

> [ファイル]-[アカウント]で、ユーザーに対するライセンス認証が完了しており、
> かつ、更新プログラムも適用済みになっているでしょうか?
この辺は確認済で問題は無いと判断しております。

> 一度もデスクトップセッションで実行していない場合、一時フォルダーの設定などが不足していたり、
> Office のライセンス認証のところで躓いてしまっていたりする可能性があります。
スケジューラー実行時の同じドメインのadministrator で、表で実行して正常に動作する事を確認しております。


> また、Office はストアアプリ版ではなく
すみません、環境に漏れておりましたね。 OFFICEは2013STDでデスクトップアプリです。


> もしも低優先度になっている場合は、設定を見直しておいた方が良いと思います。
この部分は全く考慮しておりませんでした。
参考URLを元に、チェレンジしてみます。


> [基本優先度]列を表示させることで確認できます。
確認してみました。
VBの実行プログラムは「通常以下」
呼び出されて起動したEXCELは「通常」でした。 ※2つ表示


以上、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^5: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12021
投稿日: 2020/03/10(Tue) 11:56
投稿者魔界の仮面弁士
> > 一度もデスクトップセッションで実行していない場合、一時フォルダーの設定などが不足していたり、
> > Office のライセンス認証のところで躓いてしまっていたりする可能性があります。
> スケジューラー実行時の同じドメインのadministrator で、表で実行して正常に動作する事を確認しております。

Office は対話型インターフェイスを要求するので、
>> ログインしているかどうかにかかわらず実行する 
では起動できません。
『ユーザーがログオンしているときのみ実行する』を指定してください。


どうしても無人実行するのならば、タスクスケジューラーから起動できるよう、
仮想デスクトップ フォルダーを用意する必要があります。当然無保証ですが。

64bit 版 Office - C:\Windows\System32\config\systemprofile\Desktop
32bit 版 Office - C:\Windows\SysWOW64\config\systemprofile\Desktop

[ツリー表示へ]
タイトルRe^6: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12022
投稿日: 2020/03/11(Wed) 09:26
投稿者各務
魔界の仮面弁士 様

返答ありがとうございます。

>『ユーザーがログオンしているときのみ実行する』を指定してください。
確かし、ログインし実行する分には問題無く正常動作いたします。
しかし、サーバーでの実行なのでログインしっぱなしというわけにもいかず、自動実行での運用を行いたい。
いろいろと無理や問題があるのは承知しているのですが。

ちなみにですが、VB.NETのプログラムはもちろんですがEXCEL自体も、対話形式で何かを聞いてくるようにはなっておりません。 実際表で実行した場合は、何も入力する事は無く、起動し処理が完了した後終了します。
処理の間は、EXCEL自体は画面に現れる事が無く、バックグランドで終了します。

バックグランドにEXCELが現れた段階で処理が止まるので、バックグランド実行時にEXCELが何かダイアログ的なものを表示しているのでしょうか。


> 64bit 版 Office - C:\Windows\System32\config\systemprofile\Desktop
> 32bit 版 Office - C:\Windows\SysWOW64\config\systemprofile\Desktop
「Desktop」フォルダーを単純に作って実行してみましたが、結果は同じでした。

[ツリー表示へ]
タイトルRe^7: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12023
投稿日: 2020/03/11(Wed) 19:39
投稿者魔界の仮面弁士
>> 64bit 版 Office - C:\Windows\System32\config\systemprofile\Desktop
>> 32bit 版 Office - C:\Windows\SysWOW64\config\systemprofile\Desktop
> 「Desktop」フォルダーを単純に作って実行してみましたが、結果は同じでした。

当方では試していないのですが、Web で検索した限りでは、
上記フォルダーで解決したという報告が多かったのですが…駄目でしたか。


フォルダー作成後は、念のために再起動を行っておいてください。
それから、フォルダーの作成は「管理者コマンドプロンプト」から行ってください。

このフォルダーは管理者に対してはフルコントロール権限がありますが、
一般ユーザー権限だと閲覧すらできないようになっているためです。
(エクスプローラーからだと追加のアクセス権の割当を要求されてしまうはず)


このフォルダーのアクセス権を cacls コマンドで確認すると、
恐らく下記 2 件の ACL 情報が列挙されると思います。

 NT AUTHORITY\SYSTEM:(OI)(CI)F
 BUILTIN\Administrators:(OI)(CI)F


あとは権限繋がりで、レジストリ関係ぐらいしか思い当たらないです。

スケジュール起動の場合とデスクトップ起動の場合とで、
レジストリ アクセスやファイル アクセスの I/O 動作に違いが無いか、
Process Monitor で追跡できないでしょうか。


> ちなみにですが、VB.NETのプログラムはもちろんですがEXCEL自体も、
> 対話形式で何かを聞いてくるようにはなっておりません。

Hongliang さんが提示してくださった URL にも書かれていますが、
Office は対話型インターフェイスを前提として設計されています。

Excel の Interactive プロパティや DisplayAlerts プロパティを
False にすることで、ある程度は自動応答な動作にすることができますが、
それによって対話型インターフェイスを完全に抑制できるわけではありません。


ちなみにかつての VB6 においては、App.UnattendedApp プロパティというものがあり、
コンパイルオプション「対話型インターフェイスの抑制」のチェックボックスから、
対話モードの有無を設定できるようになっていました。
残念ながら VB.NET や Excel には同等機能がありません。

VB6 で UnattendedApp = True の場合、MsgBox を呼び出したとしても、
メッセージ応答のためにプログラムが中断することはありません。
また、プログラムで捕らえていない実行時エラーが発生した時にも
ダイアログの類は一切表示されず、メッセージ内容はイベントログに
自動記録されるような仕掛けになっていました。

[ツリー表示へ]
タイトルRe^8: WIN2012サーバー+タスクスケジューラーで、EXCELの実行
記事No12028
投稿日: 2020/03/25(Wed) 17:11
投稿者各務
魔界の仮面弁士 様、Hongliang 様

いろいろと情報ありがとうございました。
結果はNGで、サーバー上で実行する事が出来ませんでしたが、他に24時間起動させているクライアント機があり、そのマシンで実行する運用に変更する事で対応いたしました。


その際、今回いただいた情報が役に立ちました。

クライアント機は、WINDOWS7なのですが当初状況は全く同じで、Excelを呼び出すところで止まってしまっておりました。
しかし Desktop フォルダーを作る事で実行できるようになりました。

ここまでお付き合いいただき感謝いたします。

[ツリー表示へ]