タスク スケジューラを介して Windows 2008 Server で実行している小さな .NET アプリがあります。このアプリケーションは、Excel ファイルを開き、csv として保存する必要があります。ワークブックを開こうとすると、タスクが失敗します。タスク スケジューラを使用せずに手動で実行すると、アプリは正常に動作します。
「最高の権限で実行する」に設定し、「ユーザーがログオンしているかどうかにかかわらず天気予報を実行する」にチェックを入れました。
私の推測では、このプロセスは、サービスの「デスクトップとの対話」フラグをチェックするのと同様に、デスクトップと対話する必要があるということです。しかし、スケジュールされたタスクについて同様のものを見つけることができませんでした。
失敗しているコードは次のとおりです (workbook.open 呼び出しで失敗します)。
public static void ConvertExcelToCsv(string source, string destination)
{
if (File.Exists(destination)) File.Delete(destination);
Application xl = new Application();
try
{
Workbook workbook = xl.Workbooks.Open(source, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Worksheet ws = (Worksheet)workbook.Sheets[1];
ws.SaveAs(destination, XlFileFormat.xlCSV, Type.Missing, Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing,true);
Marshal.ReleaseComObject(ws);
}
finally
{
xl.DisplayAlerts = false;
xl.Quit();
Marshal.ReleaseComObject(xl);
}
}