我想以编程方式将我的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."}
答案 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()辅助方法构造路径。