我在WPF中创建了一个应用程序,它只是轮询应用程序。现在我想在Windows Startup上启动该应用程序(用户登录后)。我还使用Wix Toolset创建了一个安装程序包,它将注册表项添加到 Software \ Microsoft \ Windows \ CurrentVersion \ Run 。程序实际上尝试运行但没有错误。我从Windows 事件查看器中得到错误,我无法理解这个错误的产生位置。
堆栈追踪:
Application: icBlync.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.DirectoryNotFoundException
at System.IO.__Error.WinIOError(Int32, System.String)
at 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)
at System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare)
at System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCacheOption, System.Guid ByRef, Boolean ByRef, System.IO.Stream ByRef, System.IO.UnmanagedMemoryStream ByRef, Microsoft.Win32.SafeHandles.SafeFileHandle ByRef)
at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(System.Uri, System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCreateOptions, System.Windows.Media.Imaging.BitmapCacheOption, System.Net.Cache.RequestCachePolicy, Boolean)
at System.Windows.Media.Imaging.BitmapFrame.CreateFromUriOrStream(System.Uri, System.Uri, System.IO.Stream, System.Windows.Media.Imaging.BitmapCreateOptions, System.Windows.Media.Imaging.BitmapCacheOption, System.Net.Cache.RequestCachePolicy)
at System.Windows.Media.Imaging.BitmapFrame.Create(System.Uri, System.Net.Cache.RequestCachePolicy)
at System.Windows.Media.Imaging.BitmapFrame.Create(System.Uri)
at icBlync.Windows.SettingWindow..ctor()
at icBlync.App..ctor()
at icBlync.App.Main()
请帮助。
答案 0 :(得分:0)
当App从Startup启动时,工作目录不是已安装的目录。因此,当应用程序尝试加载图标时,它会提供 System.IO.DirectoryNotFoundException 。
我刚刚使用以下命令将工作目录更改为Installed目录:
Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath);