C#应用程序自动运行异常

时间:2013-12-04 23:41:04

标签: c# .net wpf exception autorun

我想以编程方式将我的C#应用​​程序添加到Windows自动运行,并在某处读取以下代码可以解决这个问题:

var key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.SetValue("MyApplication", System.Reflection.Assembly.GetEntryAssembly().Location);

当我重新启动计算机时,应用程序的启动画面出现了,但几秒钟后应用程序崩溃了,我看到了这个:

an unhandled microsoft .net framework exception occured 

你能给我一些线索,在哪里寻找问题的根源吗?

编辑: 我运行了调试器,这就是我发现的(XamlParseException):

{"'The invocation of the constructor on type 'MyApplication.GUI.MainWindow' that matches the specified binding constraints threw an exception.' Line number '3' and line position '9'."}

内部异常消息(System.UnauthorizedAccessException):

{"Access to the path 'C:\\Windows\\system32\\db.db' is denied."}

1 个答案:

答案 0 :(得分:2)

这是您的代码中的错误,您使用的是相对文件名而不是完整路径。换句话说,"db.db"代替"c:\foo\bar\db.db"。您现在将对程序的默认目录有很大的依赖性。当您调试和测试应用程序时,这将在Visual Studio中正常工作,默认目录将是项目的bin \ debug目录。您可以轻松地写入该目录。

但是当Windows启动程序时,会工作,程序的默认目录现在将是默认的Windows目录c:\ windows \ system32。程序没有对该目录的写访问权,它受UAC保护。

通过指定文件的完整路径来修复错误。您将需要使用Environment.GetFolderPath()来获取一个好的目录,该目录几乎总是SpecialFolder.ApplicationData。使用Path.Combine()辅助方法构造路径。