从asp.net / C#网页调用vb脚本

时间:2009-10-19 10:56:13

标签: c# asp.net excel vbscript webserver

我编写了一个带有C#的ASP.NET网页,它运行现有的vb脚本。

用户可以使用网页上传Excel电子表格(.xls),C#对文件进行一些基本检查(文件类型,文件名等),然后将.xls保存到网络位置。

然后,C#将.xls的网络路径传递给vb脚本,该脚本从.xls获取所需信息以创建.csv文件。

最后,.csv被传递到存储过程并上传到数据库表。

问题是当我在我的机器上本地运行网页时,所有这一切都运行良好。但是,当我将页面上传到Web服务器时,它似乎不执行vb脚本;相反,它只是坐在那里等待脚本退出。

一些快速信息:

  • Excel安装在Web服务器上
  • 该网站设置为执行脚本和可执行文件
  • 该脚本目前设置为“运行为”我的个人域登录(必须更改),其中包含Web服务器上的管理员
  • 如果我使用cmd提示符在Web服务器上运行脚本,则可以使用

我真的很感激任何关于可能出现问题的想法......说真的,我正在把头发拉过这个,并且会考虑任何想法,无论多么疯狂......但是,这是一个很大的问题一,尽管有许多其他方法可以达到相同的结果,但我担心由于种种原因,我必须与之合作:)

修改

以下是我如何调用脚本

                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正在运行,我只需要勾选任务管理器中的“所有用户”复选框......但我仍然没有更聪明!

非常感谢

2 个答案:

答案 0 :(得分:1)

没有看到代码,这是一个盲目的猜测 - 我建议您检查如何指定vb脚本的路径 - 确保您没有使用绝对路径,并且该文件位于相对于该文件的相同位置服务器上的C#页面,就像在您的计算机上一样。

答案 1 :(得分:1)

听起来您正在使用自动化来控制Excel应用程序本身?

  

一些快速信息:

     
      
  • Excel安装在Web服务器上
  •   

这通常是一个坏主意,因为Excel应用程序不是旨在由服务器自动化的应用程序。事情可能会挂起,因为应用程序正在某个对话框中等待用户输入。并且它不能同时处理多个用户的操作。

如果最终目标是从excel文件中提取数据并将其放入sql server中,我建议您使用Jet OLEDB提供程序从您的Web应用程序中检索excel文件中的数据,并让它将数据提供给sql server,或让sql server直接执行。如果excel文件中有大量数据,后者可能是最佳选择