我正在编写一个需要打印到USB收据打印机(因此POSPrinter不适用)的应用程序,而无需提升“打印对话框”窗口。我发现了一个示例,该示例使用附带的exe(由@Stefan Wick提供给this question)从UWP应用程序中进行打印。该程序的示例在我的开发笔记本电脑上运行。当我在UWP应用中放入相同的代码时,出现以下异常:
-System.UnauthorizedAccessException:'访问被拒绝。 (来自HRESULT的异常:0x80070005(E_ACCESSDENIED))'
完整的异常详细信息是:
System.UnauthorizedAccessException HResult = 0x80070005 消息=访问被拒绝。 (来自HRESULT的异常:0x80070005(E_ACCESSDENIED)) 来源= System.Private.CoreLib 堆栈跟踪: 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在
中的POSClient.Views.SellPage.d__60.MoveNext()
此代码块中发生异常:
private async void Button_Click(object sender, RoutedEventArgs e)
{
if (imageFile != null)
ApplicationData.Current.LocalSettings.Values["FileToPrint"] = imageFile.Path;
if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
{
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
}
}
LaunchFullTrustProcessForCurrentAppAsync
行尝试运行时。
它永远不会到达exe,但是如果有帮助,这里是相关代码:
static void Main(string[] args)
{
AutoResetEvent resetEvent = new AutoResetEvent(false);
if (ApplicationData.Current.LocalSettings.Values.ContainsKey("FileToPrint"))
{
Image img = Image.FromFile(ApplicationData.Current.LocalSettings.Values["FileToPrint"] as string);
PrintDocument doc = new PrintDocument();
doc.PrintPage += new PrintPageEventHandler((sender, e) =>
{
img = ResizeImage(img, e.Graphics.VisibleClipBounds.Size);
e.Graphics.DrawImage(img, Point.Empty);
e.HasMorePages = false;
});
doc.EndPrint += new PrintEventHandler((sender, e) =>
{
resetEvent.Set();
});
doc.Print();
}
resetEvent.WaitOne();
}
我认为此错误是由于试图访问文件,但可能是由于试图访问exe?我已经在files文件夹上设置了权限,以允许每个人都具有读/写权限(出于测试目的),但仍然会遇到相同的异常。
此示例代码将所选图像打印到默认打印机。一旦工作成功,我将进行必要的修改以打印收据。
我对UWP相对较新,对此深感困惑(我花了上周时间搜索任何相关内容,但仍然找不到答案)。任何输入将不胜感激!
谢谢。
答案 0 :(得分:0)
发布此消息后,几乎不相关的搜索就给了我答案。问题出在访问exe。我不知道要修改 package.manifest 文件以赋予exe fullTrustProcess 功能。一旦解决了这些问题,代码就可以完美运行。