我编写了一个带有C#的ASP.NET网页,它运行现有的vb脚本。
用户可以使用网页上传Excel电子表格(.xls),C#对文件进行一些基本检查(文件类型,文件名等),然后将.xls保存到网络位置。
然后,C#将.xls的网络路径传递给vb脚本,该脚本从.xls获取所需信息以创建.csv文件。
最后,.csv被传递到存储过程并上传到数据库表。
问题是当我在我的机器上本地运行网页时,所有这一切都运行良好。但是,当我将页面上传到Web服务器时,它似乎不执行vb脚本;相反,它只是坐在那里等待脚本退出。
一些快速信息:
我真的很感激任何关于可能出现问题的想法......说真的,我正在把头发拉过这个,并且会考虑任何想法,无论多么疯狂......但是,这是一个很大的问题一,尽管有许多其他方法可以达到相同的结果,但我担心由于种种原因,我必须与之合作:)
修改的
以下是我如何调用脚本
try
{
System.Security.SecureString password = new System.Security.SecureString();
string uspw = "mypassword";
foreach (char c in uspw)
{
password.AppendChar(c);
}
Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.Arguments = scriptPath + " //Nologo " + uploadPath + xlsFileName;
scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
scriptProc.StartInfo.UserName = "myusername";
scriptProc.StartInfo.Password = password;
scriptProc.StartInfo.UseShellExecute = false;
scriptProc.Start();
scriptProc.WaitForExit();
scriptProc.Close();
}
catch...
所有文件路径都是相对的。
调用脚本时代码似乎失败了。您可以清楚地看到等待脚本完成的页面。但是,如果您在Web服务器上查看任务管理器,则cscript或excel都不会开始运行。
我还在脚本开头没有显示消息框
编辑2 事实证明cscript正在运行,我只需要勾选任务管理器中的“所有用户”复选框......但我仍然没有更聪明!
非常感谢
答案 0 :(得分:1)
没有看到代码,这是一个盲目的猜测 - 我建议您检查如何指定vb脚本的路径 - 确保您没有使用绝对路径,并且该文件位于相对于该文件的相同位置服务器上的C#页面,就像在您的计算机上一样。
答案 1 :(得分:1)
听起来您正在使用自动化来控制Excel应用程序本身?
一些快速信息:
- Excel安装在Web服务器上
这通常是一个坏主意,因为Excel应用程序不是旨在由服务器自动化的应用程序。事情可能会挂起,因为应用程序正在某个对话框中等待用户输入。并且它不能同时处理多个用户的操作。
如果最终目标是从excel文件中提取数据并将其放入sql server中,我建议您使用Jet OLEDB提供程序从您的Web应用程序中检索excel文件中的数据,并让它将数据提供给sql server,或让sql server直接执行。如果excel文件中有大量数据,后者可能是最佳选择