Неправильный запуск программы при использовании ярлыка - PullRequest
0 голосов
/ 23 января 2020

Когда я пытаюсь запустить мою программу с помощью ярлыка или 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();
}

Code of the app I am trying to launch

Редактировать: если я запускаю программу вручную с .exe открывается нормально (да и IDK, если это 64-разрядное приложение имеет к этому какое-то отношение)

Редактировать: это мой process.start Process.Start(path.Text + "\\Multimanager Launcher.exe");, а path.text - это каталог в скриншот Ярлык был сделан с использованием кода на этом сайте здесь

1 Ответ

1 голос
/ 23 января 2020

Не используйте Environment.CurrentDirectory для работы с DLL. Это ужасный недостаток безопасности. Ваше приложение ищет библиотеки DLL в текущем каталоге, а не в каталоге приложения. Надеюсь, это не загрузка их из текущего каталога, но с этим нужно быть очень осторожным.

Чтобы получить каталог приложения, вы можете использовать AppDomain.CurrentDomain.BaseDirectory. Это не изменится в зависимости от (настраиваемого пользователем!) Текущего каталога.

...