Я пытаюсь запустить 'EXE', используя код c # для преобразования .xls в .xlsx. Он работает успешно и работает как положено, если я использую консольное приложение или cmd.
Но когда я запускаю его на стороне сервера (код, размещенный в IIS, т. Е. Код выполняется с использованием рабочего процесса w3wp.exe), он не может конвертировать файлы в .xlsx
Сначала я использовал Excelcnv.exe для преобразования
if (System.IO.File.Exists(pstrIPDTemplatePath))
{
string pstrOpenXMLIPDTemplatePath = pstrIPDTemplatePath.Replace(".xls", ".xlsx");
string processArguments = "-oice \"" + pstrIPDTemplatePath + "\" \"" + pstrOpenXMLIPDTemplatePath + "\"";
ProcessStartInfo Excelcnv = new ProcessStartInfo();
Excelcnv.FileName = mstrExcelCnvExePath;
Excelcnv.Arguments = processArguments;
Process.Start(Excelcnv);
}
Он успешно конвертировал несколько файлов, но для нескольких файлов он создает процесс excelcnv.exe * 32 в диспетчере задач, но не конвертирует файл Excel. Я даже использовал обработчики событий для вывода, но результат нулевой. Процесс переходит в неопределенное состояние.
Но если я запускаю его через консольное приложение, оно успешно конвертировало файл, после запуска также появлялось диалоговое окно для конвертации нескольких файлов, которые Excel не запускал правильно, и с вопросом, запускаться ли в безопасном режиме.
Чтобы избежать этой проблемы безопасного режима, я пытался использовать ofc.exe
Итак, я использовал ofc.exe для преобразования, как показано ниже:
Process prc = new Process();
prc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
prc.StartInfo.FileName = @"OFC.exe";
prc.StartInfo.Arguments = @"ofc.ini";
prc.StartInfo.UseShellExecute = false;
prc.StartInfo.RedirectStandardOutput = true;
prc.Start();
То же самое с этим кодом. Он работает успешно и конвертируется, как и ожидалось, при запуске через консольное приложение.
Невозможно преобразовать в .xlsx, но процесс создается в диспетчере задач, а файл журнала пуст при запуске с использованием процесса w3wp, размещенного в IIS.
Даже после предоставления IIS_IUSRS разрешения на местоположение 'EXE', оно не работает, но работает в консольном приложении.
Есть идеи, почему это происходит, и как обойти это?