Получить каталог программных файлов из Windows в Borland C ++ 6 - PullRequest
0 голосов
/ 28 марта 2011

Мне пришлось создать исполняемый файл (с использованием Borland C ++ Builder 6) вместо командного файла для Windows 7, поскольку разрешения не позволяли обычным пользователям (не администраторам) запускать необходимый пакет. У нас есть несколько разных машин с Windows 7, некоторые 64-битные, некоторые 32 и т. Д. Проблема, с которой я сталкиваюсь, заключается в том, что каталог «Program Files» жестко запрограммирован в программе, но это не всегда ПРАВИЛЬНО. каталог программных файлов, что приводит к ошибкам на некоторых машинах.

Мне знаком метод получения каталога программных файлов из реестра, но я боюсь, что это не сработает на всех компьютерах из-за настроек разрешений, не позволяющих программам получать доступ к реестру. Я искал все выше и ниже такую ​​функцию, как GetWindowsDirectory , но безрезультатно. У кого-нибудь есть предложения?

EDIT: Я запрограммировал это на компьютере с Windows XP, чтобы он просто помещался на Win7 (нет способа изменить или избежать вещи с XP / 7, как бы это ни было глупо). Это простая утилита, которая не требует установки; это просто помещено в файл. Нужно просто выйти и найти каталог программных файлов для выполнения некоторых задач.

Ответы [ 5 ]

1 голос
/ 28 марта 2011

Это прежде всего проблема развертывания. Вам придется скопировать / установить вашу программу в c:\program files (x86) на 64-битной машине. Вы можете просто использовать файлы программы c: \ в вашем коде, Windows перенаправляет его в каталог (x86).

В противном случае нелегко вылечить попытку обойти UAC. Вам нужно будет вставить манифест в исполняемый файл, чтобы запросить права администратора. Пользователь получает приглашение UAC, чтобы сообщить ей, что вы собираетесь взломать приватные части. Как это сделать с помощью такого старого инструмента, для меня не очевидно, вам, вероятно, придется встроить его в файл .rc. Или используйте файл .manifest.

0 голосов
/ 10 марта 2012

после установки программного обеспечения перейдите на:

C:\Program Files\Borland\CBuilder6\Bin

Щелкните правой кнопкой мыши файл bcb.exe, выберите

Свойства -> Совместимость

Выберите опцию - Run this program mode Windows XP(Service Pack 3) и Privilege Level

Затем выберите параметр Run as administrator и нажмите Применить.

Это работает для моей проблемы.

0 голосов
/ 28 марта 2011

Используйте SHGetFolderPath с CSIDL_PROGRAM_FILES.

Существует более новая версия под названием SHGetKnownFolderPath, если вы всегда включеныWindows Vista или более поздняя версия, но вам может потребоваться обновить SDK платформы.Если вы все еще используете Borland C ++ 6, я подозреваю, что ваш Platform SDK может быть старше.В этом случае вы сможете использовать SHGetFolderPath.

0 голосов
/ 28 марта 2011

В Windows 7 x64 просто создайте точку соединения в «c: \ Program Files», указывающую на фактическую папку, в которой находится установка, в «c: \ Program Files (x86)».Это должен сделать тот же пользователь, который устанавливает программное обеспечение.Это должно решить не только вашу проблему, но и сторонние пакеты, которые иначе не работали бы на Win 7 x64.

Если вы не знаете, что такое точка соединения, просто прочитайте справку для mklink.

...