大家好,这个问题我已经研究了很多天了,但是到目前还没有解决,希望各位老大们能够给出方法,谢谢了(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();
}
c/s程序和b/s程序的运行机制不同!如果是c/s 程序可以向你那样写!
一般来说,打印是在客户端进行的,但是按你的程序看来,是在服务器端启动打印程序,这样就算顺利打印也只是在服务器端打印出来,有意义吗?
没有相关经历,只能从感官上理解了。
如果真如楼主说的通过 web 启动服务端程序有问题,我想楼主可以考虑做一个“代理端”winform或winconsole程序。通过 .net remoting等进行传参,这未必不是一个解决方案。
web client -> web server(remote client) -> remote server -> printer
意图是让 web server 通过 remote 技术调用本地或远程的 remote server(winform或console),而通过该 remote server 启动你要启动的程序。
//后台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文件节点这个应该是服务器端调用本地程序时,权限问题造成的,你最好看看我使用的方法,