首页 新闻 会员 周边

C#.net 调用 exe 不成功,进程里面有,为什么???

0
悬赏园豆:100 [已解决问题] 解决于 2009-05-27 15:25

大家好,这个问题我已经研究了很多天了,但是到目前还没有解决,希望各位老大们能够给出方法,谢谢了(100分,不好意思,我就这么多分了,解决了立马给分)!

主要功能: IIS 下 运行网页 点击打印按扭,调用服务器端exe 运行打印程序(我用vb写的一个调用                  bartender打印程序)

问题分析:这样运行失败,在进程里面能找到,相关的权限什么的我都已经解决,事件查看器里面没有错误                   提示,我用C#.net winform 程式测试OK,本机调试状态下运行也是OK,查了很多资料要么说  不行,要么说只能Winform下面运行,但是我们公司的ERP就有相关的打印程序,所以我想还是能行的通的,希望老大们能够帮我解决,不胜感激,具体相关代码如下:

 protected void btnPrint_Click(object sender, EventArgs e)
    {

      ThreadStart openUrlDelegate = new ThreadStart(OpenUrl);
                Thread myThread = new Thread(openUrlDelegate);
                myThread.SetApartmentState(ApartmentState.STA);   
                myThread.Start();
                myThread.Join();
                sendMsg("打印成功");
            }
            else
            {
                sendMsg("打印失败");
            }
    }

    public void OpenUrl()
    {
        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo.FileName = @"F:\VBPrintLabel.exe"; // Path for the cmd prompt
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.CreateNoWindow = true;
        p.Start();      
    }

陳修君的主页 陳修君 | 菜鸟二级 | 园豆:480
提问于:2009-05-26 16:39
< >
分享
最佳答案
0

同2楼,你是在服务器端打印?

调用客户端的,可以看下

http://www.cnblogs.com/phinecos/archive/2009/03/06/1404951.html

wingoo | 小虾三级 |园豆:1513 | 2009-05-27 12:11
其他回答(4)
0

c/s程序和b/s程序的运行机制不同!如果是c/s 程序可以向你那样写!

猥琐的疯子 | 园豆:142 (初学一级) | 2009-05-26 22:55
0

一般来说,打印是在客户端进行的,但是按你的程序看来,是在服务器端启动打印程序,这样就算顺利打印也只是在服务器端打印出来,有意义吗?

莫慌 | 园豆:9 (初学一级) | 2009-05-27 08:46
0

没有相关经历,只能从感官上理解了。

如果真如楼主说的通过 web 启动服务端程序有问题,我想楼主可以考虑做一个“代理端”winform或winconsole程序。通过 .net remoting等进行传参,这未必不是一个解决方案。

web client -> web server(remote client) -> remote server -> printer

意图是让 web server 通过 remote 技术调用本地或远程的 remote server(winform或console),而通过该 remote server 启动你要启动的程序。

陛下 | 园豆:3938 (老鸟四级) | 2009-05-27 11:17
0
//后台button按钮(ASP.NET)
 /// <summary>
        /// 执行出库任务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnRcv_Click(object sender, EventArgs e)
        {
            string taskNo = txtHidCode.Text;
            txtHidCode.Text = "";
            string task_type = this.txtHidTaskType.Text;
            txtHidTaskType.Text = "";
            BLL.ORDER_DOC bllOrderDoc = new ORDER_DOC();
            int result = bllOrderDoc.ExistsTaskNo(taskNo);
            if (result == 0)
            {
                //执行把出库任务信息同步到一体化平台
                string[] outPrmam = bllOrderDoc.ExecYTHPTSyncTaskInfo("34401", taskNo);
  
                //通知消息            
                InterfaceCenter inter = new InterfaceCenter();
                bool reStr = inter.InformRFIDDB2("4""2", System.DateTime.Now, "34401", taskNo, true);
    
                //变更出库队列为可执行
                bllOrderDoc.YTHPTSyncTaskInfo(taskNo);
            }
            //弹出RFID扫描界面
            ExecScriptCode("Run(\"" + taskNo + " " + globalInfo.AreaId + " " " 测试员 " " " + task_type + "\")");
          
            AddLog("执行出库任务" , taskNo);
        }
//前台js方法
function Run(arg) { 
    var objShell = new ActiveXObject("wscript.shell"); 
    var  key1  = objShell.RegRead("HKEY_LOCAL_MACHINE\\Software\\JLPT\\CS\\Path");
    var e = arg;  
    objShell.Run(key1 + " " + e ); 
    objShell = null;
//同时在注册表中,添加相应的winform程序编译后的exe文件节点
坐看昀起 | 园豆:206 (菜鸟二级) | 2013-02-19 14:56

这个应该是服务器端调用本地程序时,权限问题造成的,你最好看看我使用的方法,

把这个程序在本地注册一下,然后通过QQ执行的方法测试一下,应该可以的
支持(0) 反对(0) 陳修君 | 园豆:480 (菜鸟二级) | 2013-02-21 14:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册