Я распространяю бесплатный продукт, который читает и записывает текстовые файлы с уникальным расширением. Я надеялся, что двойной щелчок на таком файле автоматически запустит приложение.Программе на C++ необходима ассоциация файлов
При разработке на Windows 7 Professional я настроил ассоциацию, чтобы открыть мои файлы при двойном щелчке, щелкнув правой кнопкой мыши файл-> Открыть с ...-> Выбрать программу по умолчанию ...-> Обзор. .. за которым следует «Всегда использовать выбранную программу для открытия этого типа файла». Хорошо. Он сделал то, что нужно. Я собирался отправить свою программу с инструкциями для пользователей делать то же самое.
Однако, когда я переместил местоположение двоичного файла, я вижу, что «Всегда использовать» теперь выделено серым цветом/нечувствительным, поэтому, когда я могу перейти к новому двоичному файлу, я не смог сделать его по умолчанию. Поскольку я думал, что у моих пользователей тоже будут проблемы с этим, я хотел бы посмотреть, смогу ли установка или запуск программы заботиться о сопоставлении.
Я посмотрел на Windows Installer, в течение примерно 5 минут, прежде чем определить, что было гораздо больше мощности и сложности, чем я нуждался (для моих потребностей, почтовый файл будет достаточно для этого файла отображения, за исключением.)
Так что я взял посмотрите, как моя программа при запуске настроила отображение, если оно уже не было. (Я знаю, что это было бы очень плохое поведение, если бы мы говорили об общем типе файлов, таких как .html или .jpg, но в этом случае его расширение .blahblah, которое, безусловно, никто не использует ни для чего.)
Основываясь на информации на http://www.cplusplus.com/forum/windows/26987/ и http://msdn.microsoft.com/en-us/library/cc144148(v=vs.85).aspx Мне удалось запустить мою программу при запуске, открыть HKEY_CLASSES_ROOT \ .blahblah и подтвердить (и при необходимости изменить) текст по умолчанию, чтобы быть точным описанием файла (заменив текст, который, возможно, был созданный по умолчанию, когда я провел ассоциацию вручную прошлым летом). Однако, когда дело дошло до создания команды HKEY_CLASSES_ROOT \ firm.app.1 \ shell \ open \, моя оболочка RegCreateKeyEx(), которая отлично работает, чтобы изменить значение \ .blahblah, теперь дает код возврата 5, по-видимому, отсутствие разрешения.
При дальнейших исследованиях кажется, что модель разрешений может привести к сбою всех таких запросов. Может ли кто-нибудь подтвердить или опровергнуть это? Если подтвердите, есть ли хорошая рекомендация, я должен изучить этот вопрос?
В противном случае, какие предложения? Должен ли я кусать пулю и изучать установщик Windows? Или есть способ получить разрешения, необходимые для редактирования реестра, когда мое собственное программное обеспечение запускается в первый раз?
Примечание Я разрабатываю с Visual Studio 2008 на Windows 7 Professional, и, хотя все еще любитель Windows, программист я делал C++, так как 80-х годов на Unix/Linux ...
Что такое выполнение программы как root? Обычно установщики должны делать то же самое. Существуют также функции, позволяющие вашей программе запрашивать расширенное разрешение (вызывая появление этого желтого окна). – Paranaix
Спасибо Паранаикс. Оказывается, что внесение изменений в HKEY_CURRENT_USER рекомендуется и не требует root. Лично, учитывая выбор между установкой не-доверенного программного обеспечения как root и запуском чего-то как обычного пользователя, я бы предпочел позже. –