大家好,这个问题我已经研究了很多天了,但是到目前还没有解决,希望各位老大们能够给出方法,谢谢了(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文件节点
这个应该是服务器端调用本地程序时,权限问题造成的,你最好看看我使用的方法,