Windows启动时应用程序启动但无法访问文件?

时间:2013-09-12 20:02:09

标签: c#

我在编写的工作中有一个C#后端应用程序。它将状态保存到txt文件,以便当它再次启动时,它将具有继续工作所需的详细信息。如果我在注册表中添加一个密钥以在用户登录时启动应用程序(HKCU),那么应用程序将启动,但无法读取它的状态txt文件。

我不知道这里发生了什么。 txt文件必须与应用程序位于同一文件夹中,我将其加载如下:

String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();

我实际上是使用以下方式阅读文件:

String[] lines = File.ReadAllLines(SaveFile);

这些都不是真的很复杂,但因为没有加载txt文件的内容,我假设1)File.Exists()回来是假的,或者2)它回来是真的{{{ 1}}回来了。

如果我关闭程序并立即重新运行它,那么它就可以正常读取文件。在计算机启动时,如何让我的应用程序读取文件?

3 个答案:

答案 0 :(得分:2)

实际上,如果当前目录与File.Exists不同,则不检查并且不打开相同的文件(您将绝对路径传递到File.ReadAllLines和相对路径Path.GetDirectoryName(Application.ExecutablePath)) ,当你在启动时启动程序时就是这种情况(我想它应该是%WINDIR%\System32,但我不确定 - 但是,它确实不是你的应用程序文件夹。)

String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
    String[] lines = File.ReadAllLines(SaveFile);

应该是

String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
    String[] lines = File.ReadAllLines(savepath);

首次失败,因为手动启动时以及Windows启动时工作目录会有所不同。

答案 1 :(得分:0)

尝试删除File.Exists()检查(暂时)并查看是否会返回更详细的消息。它将有助于明确诊断失败的原因。文件有可能根本不存在 - 在这种情况下,您应该记录它正在寻找的完整路径,因为它可能不是您所期望的。如果以不同的身份启动进程,也可能存在权限问题。

答案 2 :(得分:0)

您应该确保在执行应用程序时它具有与系统执行时相同的权限,否则将无法访问该文件。

此外,您可能想要检查文件是否因某种原因而被锁定,并且可能会检查此主题:How to check for file lock?