Доступ к диску C: \ в Windows 7 - PullRequest
       19

Доступ к диску C: \ в Windows 7

1 голос
/ 17 февраля 2012

У меня есть полные права администратора на моем компьютере с Windows 7, но когда я запускаю свое приложение, которое создает файл на диске c: \, я получаю код ошибки 5 (доступ запрещен).Я знаю, что Windows 7 не позволяет создавать файлы в защищенных областях, таких как диск c и программные файлы, а проводник файлов вызывает окно «Административное сообщение», если я копирую туда файл откуда-то еще, после чего это позволяет, но может ли мое приложение получить уровень записиaccess?

В моем приложении пользователь может выбрать папку, в которой он хочет создать файл, поэтому, если он выберет диск c: \, он / она, очевидно, получит эту ошибку, что нежелательно.

void CTestDlg::OnBnClickedButtonCreate()
{
    CFile f;
    CFileException e;
    TCHAR* pszFileName = _T("c:\\test.txt"); // here i am hard coding path for simplicity.
    if(!f.Open(pszFileName, CFile::modeCreate | CFile::modeWrite, &e))
    {
        TRACE(_T("File could not be opened %d\n"), e.m_cause);
    }

}

Насколько я исследовал, кажется, что я не могу обойти диалог UAC, что нормально, но мое приложение даже не представляет его (что также понятно), но каковы мои варианты?

Я вижу, что мой единственный вариант - обнаружить это в моем собственном приложении, если это ОС Windows 7, и затем проверить путь к файлу перед созданием файла и представить более удобное для пользователя сообщение. Windows 7 не любит, когда вы создаетефайл в этой папке, выберите другую папку или вернитесь к xp '.Эта схема способ пойти на Windows 7?Есть ли другой способ?

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Как отметил Колинк, ваше приложение должно работать с правами администратора.Чтобы сделать это автоматически, вставьте манифест, как объяснено здесь .

РЕДАКТИРОВАТЬ: Для VS2010: Свойства проекта> Свойства конфигурации> Linker> Файл манифеста Измените «Уровень выполнения UAC» нажелаемое значение.

1 голос
/ 17 февраля 2012

Либо не пытайтесь писать в защищенные области, либо требуйте, чтобы ваше приложение запускалось с разрешениями (щелчок правой кнопкой мыши => Запуск от имени администратора).

Я знаю, что не люблю случайное появление файловв моем корне - мне нравятся мои файлы, организованные.

0 голосов
/ 19 февраля 2012

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

Обычно оболочка, функция GetSaveFileName, проверяет, можно ли создать новый файл в выбранном каталоге перед возвратом, см. Флаг OFN_NOTESTFILECREATE в описании OPENFILENAME структура. * +1010 *

Другой вариант - справиться с такой ситуацией и показать подтверждение UAC самостоятельно. Но это решение требует гораздо больше усилий, чем оно того стоит. Вы не можете поднять текущий процесс, поэтому операция сохранения файла в защищенной области должна быть реализована в другом процессе. В то же время ваш текущий процесс имеет данные для сохранения, так что вам придется реализовать связь между этими двумя процессами. Прочитайте Разработка приложений UAC для Windows Vista для получения дополнительной информации.

...