API RunFileDlg
не поддерживается и может быть удален Microsoft из будущих версий Windows (я признаю, что MS привержена обратной совместимости, и тот факт, что этот API, хотя и не документирован, кажется достаточно широко известным, делает это маловероятно, но это все еще возможно).
Поддерживаемый способ запуска диалогового окна запуска - метод IShellDispatch::FileRun
.
В C # вы можете получить доступ к этому методу, перейдя в Add Reference, выберите вкладку COM и выберите «Microsoft Shell Controls and Automation». После этого вы можете запустить диалог следующим образом:
Shell32.Shell shell = new Shell32.Shell();
shell.FileRun();
Да, API RunFileDlg
предлагает больше возможностей настройки, но имеет то преимущество, что оно документировано, поддерживается и поэтому вряд ли сломается в будущем.
Обратите внимание, что Shell32 должен быть запущен в потоке STA. Если вы получили исключение в своем коде, добавьте [STAThread]
над объявлением вашего метода, например:
[STAThread]
private static void OpenRun() {
//Shell32 code here
}
Любой метод, вызывающий метод, использующий Shell32, также должен запускаться в потоке STA.