C# 如何在服务器上使用打印机
我从outlook下载.zip文件,然后将pdf文件发送到打印机。编译时,它在我的本地计算机上工作,但我在服务器上安装了已发布的应用程序,它从outlook下载.zip文件并打开,但无法发送到打印机。我怎么办 这是我的代码:C# 如何在服务器上使用打印机,c#,C#,我从outlook下载.zip文件,然后将pdf文件发送到打印机。编译时,它在我的本地计算机上工作,但我在服务器上安装了已发布的应用程序,它从outlook下载.zip文件并打开,但无法发送到打印机。我怎么办 这是我的代码: static void Main(string[] args) { ExchangeService exchange = new ExchangeService(ExchangeVersion.Exchange2013_SP1); exchange.Cred
static void Main(string[] args)
{
ExchangeService exchange = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
exchange.Credentials = new WebCredentials("mail@", "password");
exchange.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
if (exchange != null)
{
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
FindItemsResults<Item> result = exchange.FindItems(WellKnownFolderName.Inbox, sf, new ItemView(1));
foreach (Item item in result)
{
EmailMessage message = EmailMessage.Bind(exchange, item.Id);
message.IsRead = true;
message.Update(ConflictResolutionMode.AutoResolve);
List<Attachment> zipList = message.Attachments.AsEnumerable().Where(x => x.Name.Contains(".zip")).ToList();
foreach (Attachment Attachment in zipList)
{
if (Attachment is FileAttachment)
{
FileAttachment f = Attachment as FileAttachment;
f.Load("C:\\TEST\\" + f.Name);
string zipPath = @"C:\TEST\" + f.Name;
string extractPath = @"C:\TEST\" + Path.GetRandomFileName();
ZipFile.ExtractToDirectory(zipPath, extractPath);
string[] filePaths = Directory.GetFiles(extractPath, "*.pdf",
SearchOption.TopDirectoryOnly);
foreach (string path in filePaths)
{
SendToPrinter(path);
}
}
}
}
}
}
static void SendToPrinter(string path)
{
try
{
var printerName = "EPSON L310 Series";
ProcessStartInfo info = new ProcessStartInfo(path);
info.Verb = "PrintTo";
info.UseShellExecute = false;
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
info.Arguments = "\"" + printerName + "\"";
Process p = new Process();
p.StartInfo = info;
p.Start();
p.WaitForInputIdle();
System.Threading.Thread.Sleep(3000);
if (false == p.CloseMainWindow())
p.Kill();
}
catch (Exception ex)
{
Console.WriteLine("error:", ex.Message);
Console.ReadLine();
}
}
static void Main(字符串[]args)
{
ExchangeService exchange=新的ExchangeService(ExchangeVersion.Exchange2013\u SP1);
exchange.Credentials=新的WebCredentials(“邮件@”,“密码”);
exchange.Url=新的Uri(“https://outlook.office365.com/EWS/Exchange.asmx");
if(exchange!=null)
{
SearchFilter sf=new SearchFilter.SearchFilterCollection(LogicalOperator.And,new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead,false));
FindItemsResults=exchange.FindItems(WellKnownFolderName.Inbox,sf,new ItemView(1));
foreach(结果中的项目)
{
EmailMessage=EmailMessage.Bind(exchange,item.Id);
message.IsRead=true;
message.Update(ConflictResolutionMode.AutoResolve);
列出您需要更改的内容:
info.UseShellExecute = false;
致:
因为路径
是PDF文件的路径,而不是可执行文件
根据:
当您使用操作系统外壳启动进程时,您可以
启动任何文档(与之关联的任何已注册文件类型)
具有默认打开操作)并执行操作的可执行文件
在文件上,例如打印,使用进程对象。当
UseShellExecute为false,您只能使用
进程对象
此外:
如果将WindowsStyle设置为ProcessWindowsStyle.Hidden,
UseShellExecute必须设置为true
您正在使用Hidden
-因此UseShellExecute
必须是true
,因此您可以在服务器上运行此代码,我可以假设您已经检查了“EPSON L310系列”打印机是否在那里可用吗?它在那里可用我知道,因为在服务器上,我可以使用“EPSON L310系列”手动打印@Steven当应用程序在服务器上运行时,它在哪个用户帐户下运行?作为管理员@IANMercerpress,请更新问题以显示路径的确切值(从监视或即时窗口)。这似乎是合理的,但为什么应用程序在本地工作?有时在某些情况下,做错误的事情是有效的。这并不意味着这样做是正确的。文档是权威。
info.UseShellExecute = true;