Какая разница в вызове программ Windows? - PullRequest
3 голосов
/ 13 июня 2009

У меня есть программа на компьютере с Windows XP на другом континенте. Если я запускаю его, дважды щелкнув по связанному файлу, чтобы он запускал программу в соответствии с типом сопоставления файлов, в определенный момент происходит сбой. Если я запускаю его, перетаскивая связанный файл на значок программы, он работает нормально. Если дважды щелкнуть значок и перетащить соответствующий файл в окно, он будет работать нормально.

Парень на сайте уверяет меня, что он трижды проверил связь типов файлов, и это должно быть правильно.

Предполагая, что значок указывает на тот же исполняемый файл, что и реестр, какие будут различия при запуске программы этими двумя различными способами?

РЕДАКТИРОВАТЬ: В ответ на комментарий машина, на которой у меня проблемы, работает на японском языке, в то время как моя обычная машина - американский английский.

Ответы [ 2 ]

3 голосов
/ 13 июня 2009

Одним из возможных отличий является исходный рабочий каталог: если вы перетащите файл на исполняемый файл, начальный рабочий каталог будет установлен на каталог, содержащий исполняемый файл, тогда как если вы дважды щелкните файл, начальный рабочий каталог будет установлен на некоторое значение по умолчанию независимо от того, где находится файл или исполняемый файл.

Если вы хотите получить согласованное поведение во всех случаях, вы можете использовать SetCurrentDirectory(), чтобы установить текущий рабочий каталог на то, что вы хотите; Я рекомендую каталог, содержащий исполняемый файл, который можно найти, вызвав GetModuleFileName(NULL, ...) и удалив имя исполняемого файла, или изучив argv[0] внутри main().

1 голос
/ 13 июня 2009

Когда вы дважды щелкаете файл, программа запускается, и (обычно) имя файла, по которому вы дважды щелкаете мышью, передается программе в качестве аргумента командной строки.

Когда вы перетаскиваете в окно, программа уже запущена.

Разница, очевидно, заключается в процессе запуска программы. Это программное обеспечение написано на месте? Возможно, проверьте, как он обрабатывает запуск, и убедитесь, что все соответствующие пути кода по-прежнему выполняются, когда в аргументах командной строки есть файл.

Если вы не можете проверить программный код или то, как он ведет себя при запуске, единственное, что нужно проверить в реестре и, возможно, изменить, - это способ передачи имени файла. Обычно они передаются внутри говорящих знаков. , чтобы путь к файлу мог иметь пробелы и не перепутать программу. Что-то, что можно попробовать, это убедиться, что ассоциация использует говорящие метки в аргументе, или, если это уже так, попробуйте это без. Возможно, программа неправильно обрабатывает речевые метки.

...