Автор | Сообщение |
|
| постоянный участник
|
Пост N: 4666
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.16 11:58. Заголовок: MakeDir() в Win8.1 и выше
Как создать папку в C:\Program Files для Win8.1 и выше ? Сделал тест на МиниГуи (Харбор то стандартный) Скрытый текст /* * MINIGUI - Harbour Win32 GUI library Demo */ #include "MiniGUI.ch" #define PATH_SYS GetProgramFilesFolder() + "\MyProg2016" // C:\Program Files //#define PATH_SYS C_getspecialfolder(0x0005) + "\MyProg2016" // Документы //#define PATH_SYS GetStartUpFolder() #define PATH_DBF PATH_SYS + "\DBF\" #define PATH_TEMP PATH_SYS + "\TEMP\" #define PATH_FORM PATH_SYS + "\PRN\" ///////////////////////////////////////////////////////////////////////// FUNCTION Main() IsProgDir() RETURN NIL /* "GetSystemFolder()=" , GetSystemFolder() "GetWindowsFolder()=" , GetWindowsFolder() "GetProgramFilesFolder()=", GetProgramFilesFolder() "GetStartUpFolder()",GetStartUpFolder() "WindowsVersion()-->", WindowsVersion() //"GetModuleFilename()=", GetModuleFilename(), "GetMyDokumentsFolder()=",GetMyDokumentsFolder(),; */ ///////////////////////////////////////////////////////////////////////// FUNCTION IsProgDir() LOCAL nI, cDir, nError, cMsg LOCAL aFolder := { PATH_SYS , PATH_DBF, PATH_TEMP, PATH_FORM } FOR nI := 1 TO LEN( aFolder ) cDir := aFolder[nI] IF !IsDirectory( cDir ) nError := MakeDir( cDir ) IF nError == 0 cMsg := "Создал папку для программы !;;" + cDir cMsg := AtRepl( ";", cMsg, CRLF ) MsgInfo( cMsg, 'Info!') ELSEIF nError == 5 //? "Directory", cSubDir, "exists already" ELSE cMsg := "Ошибка создания папки !" cMsg += " ( DOS error " + HB_NtoS( nError ) + " );;" cMsg += cDir + ";;" cMsg := AtRepl( ";", cMsg, CRLF ) MsgStop( cMsg, 'Ошибка!') ENDIF ENDIF MsgDebug( nI, cDir, nError ) NEXT RETURN NIL
| Тестировал в WinXP и Win7. Всё нормально создает. А выше облом.... Делал из под учётки администратора везде. Для Win8.1 не возвращает ошибку создания папки C:\Program Files\MyProg2016, а при создании папок далее - уже возвращает !
|
|
|
Ответов - 4
[только новые]
|
|
|
| |
Пост N: 752
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.01.16 13:44. Заголовок: Andrey пишет: C:..
Andrey пишет: цитата: | C:\Program Files для Win8.1 и выше ? |
| Сделал тест проще. Все создается , Windows 10 установлен на диске D Func Main() MakeDir( "D:\Program Files\ABC") Return nil
|
|
|
|
| |
Пост N: 5467
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.01.16 14:26. Заголовок: Andrey пишет: IsDir..
Andrey пишет: Возможно глючит функция. Замени ее на HB_DIREXISTS
|
|
|
|
| постоянный участник
|
Пост N: 4667
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.16 15:10. Заголовок: Dima пишет: Замени ..
Dima пишет: цитата: | Замени ее на HB_DIREXISTS |
| Заменил. Всё равно не работает. Сделал как у тебя ABC и запустил из под Еxplorer (до этого запускал из под Far ). При создании папки С:\Program Files\ABC выдает 5 (типа папка существует) Запустил прогу с правами админа, выдаёт окно подтверждения и далее вообще фигня: Вспомнил что проекты собираю на диске подключённым через SUBST. Переписал ехе-ник на диск D: - под админом стал создавать папки нормально ! Без админского доступа папки так и не создает ! Это нормально для Win8.1 или нет ?
|
|
|
|
| |
Пост N: 184
Зарегистрирован: 17.10.05
|
|
Отправлено: 11.02.16 12:38. Заголовок: У меня, начиная с ..
У меня, начиная с Windows 8, начался трабл с созданием папок (особенно внутри Program Files) и с копированием файлов в корень диска C. Решалось все только под админом и/или указанием в свойствах папки владельцем себя.
|
|
|
|