создайте папку и файлы в c: \ program files \ myApp \ data в windows 7 - PullRequest
0 голосов
/ 05 января 2011

У меня есть старое приложение на c ++, которое нужно изменить для работы с windows 7. Проблема заключается в создании новой папки и сохранении файла в этой папке. Эта папка должна быть создана в

c: \ program files \ myApp \ data \ newFolder.

Эту функцию я использую для создания новой папки и получения ошибок:

if(!CreateDirectory(pathSamples,NULL))  //Throw Error
 {
  DWORD errorcode = GetLastError(); 
  LPVOID lpMsgBuf;

  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
       NULL, errorcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );

  MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK);
 }

В XP это работает, а в Windows 7 - нет. Если я запускаю приложение от имени администратора, то папка создается, в противном случае выдается ошибка «Доступ запрещен».

У меня следующий вопрос:
Есть ли возможность внести изменения в код, чтобы папка могла быть создана в «программных файлах» и файлы, которые можно сохранить в этой папке?

PS Я уже видел эту тему , но она не отвечает на мой вопрос.

Спасибо
Ilija

Ответы [ 5 ]

3 голосов
/ 05 января 2011

Как уже писали другие,% ProgramFiles% - неподходящее место для хранения пользовательских данных.Правильное решение, очевидно, состоит в том, чтобы изменить дизайн приложения, чтобы оно использовало другое место хранения.

В качестве альтернативы существует быстрое и грязное (!) Исправление: если приложение не начинается манифест «Перенаправление данных контроля учетных записей пользователей», прозрачно перенаправляющий запросы на запись в системные области в безопасное место в профиле пользователя.Цель перенаправления -% LocalAppData% \ VirtualStore \ Program Files.Подробности об этом виде встроенной виртуализации можно найти здесь .

Так что вы можете сделать это, просто удалив манифест из вашего приложения.

3 голосов
/ 05 января 2011

С ограниченным доступом пользователей в Vista и более поздних версиях вы не хотите пытаться помещать файлы в «Program Files» или в любое другое нестандартное место.Вы действительно должны использовать SHGetFolderPath , чтобы получить правильное местоположение из системы.

3 голосов
/ 05 января 2011

Вы ответили на свой вопрос. Вы должны быть администратором, чтобы писать под Program Files в Windows 7.

Данные приложения находятся в другой области в разделе Пользователи // AppData и т. Д. *

Вы всегда можете использовать реестр, чтобы выбрать место для записи, поэтому вы можете использовать старую область в XP и новую область в Vista и Windows 7.

1 голос
/ 05 января 2011

Как @ CashCow пишет:

Вы должны быть администратором, чтобы написать под Program Files в Windows 7.

Лучший способ сделать это - улучшить процесс (используя ShellExecute "runas" или аналогичный), а затем создать папку.

Некоторые ShellExecute примеры:

0 голосов
/ 05 января 2011

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

Спасибо всем за ваши ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...