使用快捷方式时程序启动不正确
Program launching incorrectly when using a shortcut
当我尝试使用快捷方式或 Process.Start 启动我的程序时,运行 我的 if 说我的文件丢失并且它没有启动 WPF windows。下图是我尝试通过快捷方式启动的/process.start
if (!File.Exists(Environment.CurrentDirectory + "\Multimanager.dll") && !File.Exists(Environment.CurrentDirectory + "\Multimanager.dll"))
{
MessageBox.Show("You are missing the 'Multimanager.dll' and the 'Updater.dll'. Please re-run the MMInstaller.exe to re-download these files", "Missing files", MessageBoxButton.OK, MessageBoxImage.Warning);
Application.Current.Shutdown();
}
else if (!File.Exists(Environment.CurrentDirectory + "\Multimanager.dll"))
{
MessageBox.Show("You are missing the 'Multimanager.dll'. Please re-run the MMInstaller.exe to re-download these files", "Missing files", MessageBoxButton.OK, MessageBoxImage.Warning);
Application.Current.Shutdown();
}
else if (!File.Exists(Environment.CurrentDirectory + "\Updater.dll"))
{
MessageBox.Show("You are missing the 'Updater.dll'. Please re-run the MMInstaller.exe to re-download these files", "Missing files", MessageBoxButton.OK, MessageBoxImage.Warning);
Application.Current.Shutdown();
}
else
{
string MMV = Multimanager.MMShared.version().ToString();
string UV = Updater.UShared.version().ToString();
var u = new Updater.UpdaterWPF(MMV);
u.ShowDialog();
var mm = new Multimanager.UUpdater(UV);
mm.Show();
u.Close();
}
编辑:如果我使用 .exe 手动启动程序,它可以正常打开(哦,如果它是 64 位应用程序,则 IDK 与它有任何关系)
编辑:这是我的 process.start Process.Start(path.Text + "\Multimanager Launcher.exe");
而 path.text 是屏幕截图中的目录。
快捷方式是使用本网站上的代码创建的 here
不要使用 Environment.CurrentDirectory
来处理 DLL。这是一个可怕的安全漏洞。您的应用程序正在当前目录而不是应用程序目录中搜索 DLL。希望不是从当前目录加载它们,但这是需要非常小心的事情。
要获取应用程序目录,您可以改用AppDomain.CurrentDomain.BaseDirectory
。这不会根据(用户可配置!)当前目录而改变。
当我尝试使用快捷方式或 Process.Start 启动我的程序时,运行 我的 if 说我的文件丢失并且它没有启动 WPF windows。下图是我尝试通过快捷方式启动的/process.start
if (!File.Exists(Environment.CurrentDirectory + "\Multimanager.dll") && !File.Exists(Environment.CurrentDirectory + "\Multimanager.dll"))
{
MessageBox.Show("You are missing the 'Multimanager.dll' and the 'Updater.dll'. Please re-run the MMInstaller.exe to re-download these files", "Missing files", MessageBoxButton.OK, MessageBoxImage.Warning);
Application.Current.Shutdown();
}
else if (!File.Exists(Environment.CurrentDirectory + "\Multimanager.dll"))
{
MessageBox.Show("You are missing the 'Multimanager.dll'. Please re-run the MMInstaller.exe to re-download these files", "Missing files", MessageBoxButton.OK, MessageBoxImage.Warning);
Application.Current.Shutdown();
}
else if (!File.Exists(Environment.CurrentDirectory + "\Updater.dll"))
{
MessageBox.Show("You are missing the 'Updater.dll'. Please re-run the MMInstaller.exe to re-download these files", "Missing files", MessageBoxButton.OK, MessageBoxImage.Warning);
Application.Current.Shutdown();
}
else
{
string MMV = Multimanager.MMShared.version().ToString();
string UV = Updater.UShared.version().ToString();
var u = new Updater.UpdaterWPF(MMV);
u.ShowDialog();
var mm = new Multimanager.UUpdater(UV);
mm.Show();
u.Close();
}
编辑:如果我使用 .exe 手动启动程序,它可以正常打开(哦,如果它是 64 位应用程序,则 IDK 与它有任何关系)
编辑:这是我的 process.start Process.Start(path.Text + "\Multimanager Launcher.exe");
而 path.text 是屏幕截图中的目录。
快捷方式是使用本网站上的代码创建的 here
不要使用 Environment.CurrentDirectory
来处理 DLL。这是一个可怕的安全漏洞。您的应用程序正在当前目录而不是应用程序目录中搜索 DLL。希望不是从当前目录加载它们,但这是需要非常小心的事情。
要获取应用程序目录,您可以改用AppDomain.CurrentDomain.BaseDirectory
。这不会根据(用户可配置!)当前目录而改变。