C# 应用程序在Windows启动时启动,但可以';你不能访问文件吗?
我们这里有一个我编写的C#后端应用程序。它将它的状态保存到一个txt文件中,这样当它再次启动时,它将拥有继续工作所需的详细信息。如果在用户登录(HKCU)时向注册表添加一个键以启动应用程序,则应用程序将启动,但无法读取其状态txt文件 我不知道这里发生了什么。txt文件必须与应用程序位于同一文件夹中,我按如下方式加载:C# 应用程序在Windows启动时启动,但可以';你不能访问文件吗?,c#,C#,我们这里有一个我编写的C#后端应用程序。它将它的状态保存到一个txt文件中,这样当它再次启动时,它将拥有继续工作所需的详细信息。如果在用户登录(HKCU)时向注册表添加一个键以启动应用程序,则应用程序将启动,但无法读取其状态txt文件 我不知道这里发生了什么。txt文件必须与应用程序位于同一文件夹中,我按如下方式加载: String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFil
String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
我实际上是通过以下方式读取文件:
String[] lines = File.ReadAllLines(SaveFile);
这一切都不是很复杂,但因为txt文件的内容没有被加载,我假设1)file.Exists()返回为false,或者2)返回为true,而file.ReadAllLines()返回为空
如果我关闭程序并立即重新运行它,那么它可以很好地读取文件。如果当前目录与path.GetDirectoryName(Application.ExecutablePath)不同,那么当计算机启动时,我该如何让我的应用程序读取它的文件呢?实际上,您没有检查也没有打开同一个文件(您传递的是file.Exists的绝对路径和file.ReadAllLines的相对路径)
,启动程序时就是这种情况(我想应该是%WINDIR%\System32
,但我不确定-但是,它肯定不是您的应用程序文件夹)
应该是
String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
String[] lines = File.ReadAllLines(savepath);
它将第一次失败,因为手动启动和Windows启动时工作目录将不同。尝试删除文件.Exists()
检查(暂时)是否会返回更详细的消息。这将有助于明确诊断它失败的原因。有可能文件根本不存在——在这种情况下,您应该记录它正在查找的完整路径,因为它可能不是您所期望的。如果进程以不同的身份启动,也可能会出现权限问题。您应该确保在执行应用程序时,它的权限与系统执行时的权限相同,否则它将无法访问该文件
此外,您可能需要检查文件是否因某种原因被锁定,并可以检查此线程:file.Exists
如果您没有访问权限将返回false如果您无法调试它(我假设您不能,因为它发生在计算机启动期间),您可以添加MessageBox es或将应用程序中实际发生的情况写入另一个文件。有点像老式的JS调试。我认为这是真的,你是对的,也许他也应该写注册表的文件路径。这将是最简单的解决办法。
String savepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), SaveFile);
if (File.Exists(savepath)) LoadState();
String[] lines = File.ReadAllLines(savepath);