Excelでタスクスケジューラから実行するとファイルを開けないのはなぜですか?


14

Excelワークブックを開いてマクロを実行するPowerShellスクリプトを作成しました。PSコンソールから、またはpowershell.exe script.ps1を使用してコマンドラインからでも、そのスクリプトを実行すると、正常に機能します。Windowsタスクスケジューラからタスクを設定すると、そのExcelファイルに関する例外が発生し、存在しないか、すでに使用されていると通知されます。

スクリプトはコマンドラインから正常に実行されたので、ファイルは確かに存在し、使用されていないと確信しています。

ネットワークの信頼/管理者権限の問題を回避するために、Excelファイルをローカルの非特権領域に移動しようとしました。タスクは引き続き最高の特権で実行されます。パスにスペースまたは特殊文字が含まれていません。

ファイルシステムオブジェクトを使用してファイルにアクセスしようとすると、スケジューラーから実行してもエラーは発生しないので、これはExcel.Application.Workbooks.Open("..")メソッド固有のものだと思います。

私は今何を考慮すべきですか?


1
スケジュールされたタスクを実行するためにどのユーザーアカウントが使用されますか?
Massimo

ドメイン管理者のアカウントを使っていましたが、問題があるようです。ドメイン管理者グループを使用して働いた。しかし、DCOMアクセス認証にドメイン管理者アカウントの問題がある理由を見つけなければなりませんでした。
zrz 2013

tl; dr:ericの回答の回避策は効果的ですが、サポートされていません - このMicrosoftサポート記事を参照してくださいDocumentFormat.OpenXml nugetパッケージなどの代替手段を探すことをお勧めします
mklement0

回答:


8

おそらくDCOM権限の問題です。Excelの自動化は時々危険に満ちています...

このような問題を回避する唯一の方法は、DCOM権限を通じて特定のユーザーとして実行するようにExcelを設定することです。

  1. コンポーネントサービスを開きます([スタート]-> [実行]、dcomcnfgと入力)。
  2. コンポーネントサービス->コンピュータ->マイコンピュータにドリルダウンし、DCOM Configをクリックします。
  3. Microsoft Excelアプリケーションを右クリックし、[プロパティ]を選択します
  4. [ID]タブで[このユーザー]を選択し、インタラクティブユーザーアカウント(ドメインまたはローカル)のIDとパスワードを入力して、[OK]をクリックします

マシンへの管理者アクセス権を持つアカウントで実行するようにタスクを設定した場合でも、残念ながら、それをインタラクティブユーザーまたは起動として維持すると、タスクスケジューラでは機能しません。


1
dcomcnfgを指摘していただきありがとうございます。Excelアプリケーションをレジストリに手動で追加してdcomcnfgに表示できるようにしてから、ID設定を変更しようとしましたが、機能しませんでした。dcomcnfgから、私はアクセス許可を調べました。ドメイン管理者はリストにあり、ローカルおよびリモートアクセスがありましたが、アイコンの上に小さな赤い看板(赤いディスク内の白い十字)がありました。理由はわかりませんが、どういうわけかドメイン管理者アカウントに問題があります。Domain Administratorsグループアカウントを追加し、そのグループからタスクを実行することは、回避策です。
zrz 2013

Microsoftは、非対話型セッションでのOffice COMコンポーネントの実行をサポートしていません-support.microsoft.com/en-us/help/257757/…を参照してくださいエリックの答えは現在有効な回避策ですが、サポートされていません。
mklement0

この回答は、Microsoft ExcelアプリケーションエントリがDCOM Configから完全に欠落している場合に、それらを追加する方法をカバーすることで改善できます。docs.microsoft.com/en-us/archive/blogs/…を参照してくださいまた、FWIWでも問題は解決しませんでした。Excelプロセスは引き続きタスクマネージャに表示されますが、指定されたファイルが開いたり実行されたりすることはありません。
TylerH

同様に、この変更を行った後、Excel VBAファイル/ VBAエディターを実行したり、開いたりすることができなくなり、試行するたびにCTDが発生しました。
TylerH

42

次の2つのフォルダーを作成します。

32ビット:

C:\Windows\System32\config\systemprofile\Desktop  

64ビット:

C:\Windows\SysWOW64\config\systemprofile\Desktop

Excelがインタラクティブに実行されない場合、これらのフォルダーが必要です。64ビットOSを使用している場合でも、両方のフォルダーを作成します。


3
MicrosoftがOfficeコンポーネントを非対話的に実行することを推奨していないことを付け加えたいだけですが、多くの場合それを回避することは可能です。
flindeberg 14

8
これは真剣な黒魔術です。何が怖いのかわかりません-このシナリオではExcelがこのフォルダーを必要としているか、このシナリオではExcelがこのフォルダーを必要としていることを誰かが知っていました。
リッチC

1
@flindebergのポイントを強調するには:この回避策は効果的ですが、サポートされていません - このMicrosoftサポート記事を参照してください
mklement0

これらのフォルダーを作成し、system32 / SysWOW64からデスクトップフォルダーに至るまで、自分のアカウント(スケジュールされたタスクを実行するアカウントも同様)にフルコントロールを割り当てることは、それでも機能しませんでした。
TylerH

2

DCOMアクセス許可を設定する場合、Microsoft Excelが表示されない場合はdcomcnfg試してみますmmc comexp.msc /32

参照


これにより、DCOM Configが開き、いくつかのエントリをレジストリに登録するかどうかを尋ねられましたが、Excelが含まれていませんでした。
TylerH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.