将我的程序添加到启动,现在无法访问我的程序的文件

Added my program to startup, now can't access the files of my program

我像这样使用 RegistryKey 将我的程序添加到启动程序中:

private async void baslatKontrol_CheckedChanged(object sender, EventArgs e)
        {
            RegistryKey rk = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);

            string yol = Path.Combine(Environment.CurrentDirectory, "Asistanim.exe");

            if (baslatKontrol.Checked)
            {
                rk.SetValue(yol, Application.ExecutablePath);
                veri.Baslat = true;
                await JsonVeriden(veri);
            }
            else
            {
                rk.DeleteValue(yol, false);
                veri.Baslat = false;
                await JsonVeriden(veri);
            }
        }

问题是;有一个名为“Veri.json”的文件位于我的程序目录中,但每次我重新启动计算机并且我的程序运行时,它都会给我一个例外“Veri.json is not found in C:\Windows\system32\Veri.json".

我的程序在 运行 其他地方,我希望我的程序使用它在当前目录中创建的文件。怎么可以这样?

您需要使用应用程序文件夹,或者例如启动 exe 路径,而不是默认在 windows 中或从控制台命令行点获取的环境当前文件夹:

var path = Application.ExecutablePath;

要使来自 IDE 或安装路径的 运行 可执行文件具有良好的一致性,您可以使用:

/// <summary>
/// Indicate generated executable bin directory name.
/// </summary>
static public string BinDirectoryName
  => "Bin";

/// <summary>
/// Indicate generated executable bin\debug directory combination.
/// </summary>
static public string DebugDirectoryCombination
  => Path.Combine(BinDirectoryName, "Debug");

/// <summary>
/// Indicate generated executable bin\release directory combination.
/// </summary>
static public string ReleaseDirectoryCombination
  => Path.Combine(BinDirectoryName, "Release");

/// <summary>
/// Indicate the application executable file name.
/// </summary>
static public string ApplicationExeFileName
  => Path.GetFileNameWithoutExtension(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);

/// <summary>
/// Indicate the root folder path of the application.
/// </summary>
static public string RootFolderPath
  => Directory.GetParent(Path.GetDirectoryName(Application.ExecutablePath
                                                          .Replace(DebugDirectoryCombination, BinDirectoryName)
                                                          .Replace(ReleaseDirectoryCombination, BinDirectoryName))).FullName;

这里我们使用标准的初始项目属性。

现在最重要的是 json 文件,您也需要使用此路径才能在您的应用程序中使用它,例如:

var pathJSON = Path.Combine(RootFolderPath, "Veri.json");

您当然可以插入任何子文件夹...

如果 json 文件与可执行文件位于同一目录中,您可以使用这些东西来改进您的应用程序二分法。