WPF应用启动行为

时间:2017-06-09 13:37:55

标签: c# wpf powershell deployment windows-10

我开发了一个C#WPF应用程序。在VS17调试器中运行它 - 一切正常

双击发布文件夹中的.exe - 一切正常

我在多个设备上部署了该软件,双击.exe - 一切正常

通过powershell启动已部署的应用程序  Start-Process -FilePath "C:\Users\krueperj\Desktop\Release\PrometheusStartup.exe" - 一切正常

现在变得很奇怪 我想在登录时启动App。当我在Windows任务计划程序中创建任务时,应用程序因为异常而无法启动。 当我安排powershell(打开.exe)并启动时,应用程序因为相同的异常而无法启动。 当我通过代码将我的应用程序放入注册表中以自动启动时,同样的异常。

以下是eventlog所说的内容:

  

System.UnauthorizedAccessException bei System.IO .__ Error.WinIOError(Int32,System.String)bei System.IO.FileStream.Init(System.String,System.IO.FileMode,System.IO.FileAccess,Int32,Boolean, System.IO.FileShare,Int32,System.IO.FileOptions,SECURITY_ATTRIBUTES,System.String,Boolean,Boolean,Boolean)bei System.IO.FileStream..ctor(System.String,System.IO.FileMode,System.IO。 FileAccess,System.IO.FileShare,Int32,System.IO.FileOptions,System.String,Boolean,Boolean,Boolean)bei System.IO.File.InternalWriteAllBytes(System.String,Byte [],Boolean)bei System.IO。 File.WriteAllBytes(System.String,Byte [])bei PrometheusStartup.FileCache.AfterAccessNotification(Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCacheNotificationArgs)bei Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache.OnAfterAccess(Microsoft.IdentityModel.Clients.ActiveDirectory。 TokenCacheNotificationArgs)bei Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.NotifyAfterAccessCa che()bei Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase + d__53.MoveNext()bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System .Threading.Tasks.Task)bei Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext + d__48.MoveNext()bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)bei System.Runtime.CompilerServices.TaskAwaiter .HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)bei Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions + d__0.MoveNext()bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)bei System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)bei PrometheusStartup.MainWindow + d__18.MoveNext()bei Sys tem.Runtime.CompilerServices.AsyncMethodBuilderCore +<> c.b__6_0(System.Object)bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate,System.Object,Int32)bei System.Windows.Threading.ExceptionWrapper。 TryCatchWhen(System.Object,System.Delegate,System.Object,Int32,System.Delegate)bei System.Windows.Threading.DispatcherOperation.InvokeImpl()bei System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)bei System。 Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean )bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)bei MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext,System.Threading.ContextCallb) ack,System.Object)bei System.Windows.Threading.DispatcherOperation.Invoke()bei System.Windows.Threading.Dispatcher.ProcessQueue()bei System.Windows.Threading.Dispatcher.WndProcHook(IntPtr,Int32,IntPtr,IntPtr,Boolean ByRef)bei MS.Win32.HwndWrapper.WndProc(IntPtr,Int32,IntPtr,IntPtr,Boolean ByRef)bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object,Int32)bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object,System.Delegate,System.Object,Int32,System.Delegate)bei System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows。 Threading.DispatcherPriority,System.TimeSpan,System.Delegate,System.Object,Int32)bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr,Int32,IntPtr,IntPtr)bei MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop。 MSG ByRef)bei System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Thread ing.DispatcherFrame)bei System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)bei System.Windows.Application.RunDispatcher(System.Object)bei System.Windows.Application.RunInternal(System.Windows.Window) )bei System.Windows.Application.Run(System.Windows.Window)bei PrometheusStartup.App.Main()

1 个答案:

答案 0 :(得分:3)

您可能希望创建批处理文件以启动PowerShell脚本。以管理员身份运行它。您还需要设置执行策略。这是代码:

Powershell.exe -executionpolicy remotesigned -Command "& 'yourthing.ps1'"

这样做的好处是您不必以管理员身份启动PowerShell ISE,也不必以管理员身份启动PowerShell并执行脚本。您只需右键单击批处理文件并以管理员身份运行。简单!

最后一件事。使用Windows任务计划程序,您将必须检查您选择运行的任何属性(您当前的方式,只是PowerShell脚本,我建议的批处理文件,或只是.exe)并确保“以最高权限运行”已启用。