将我的程序添加到启动,现在无法访问我的程序的文件
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 文件与可执行文件位于同一目录中,您可以使用这些东西来改进您的应用程序二分法。
我像这样使用 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 文件与可执行文件位于同一目录中,您可以使用这些东西来改进您的应用程序二分法。