我正在尝试使用c#代码运行'EXE'将.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文件。我什至使用事件处理程序进行输出,但结果为null。进程将进入不确定状态。
但是,如果我通过控制台应用程序运行它,则该文件成功转换了文件,并且在运行该文件以转换多个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();
与此代码相同。通过控制台应用程序运行时,它可以正常工作并按预期进行转换。
当使用IIS托管的w3wp进程运行时,它无法转换为.xlsx,但是在任务管理器中创建进程并且日志文件为空。
即使将IIS_IUSRS权限授予“ EXE”位置,它也不起作用,但可以在控制台应用程序中工作。
有什么想法为什么会发生这种情况,以及如何解决它?