Форум » [x]Harbour » MakeDir() в Win8.1 и выше » Ответить

MakeDir() в Win8.1 и выше

Andrey: Как создать папку в C:\Program Files для Win8.1 и выше ? Сделал тест на МиниГуи (Харбор то стандартный) [more] /* * 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 [/more] Тестировал в WinXP и Win7. Всё нормально создает. А выше облом.... Делал из под учётки администратора везде. Для Win8.1 не возвращает ошибку создания папки C:\Program Files\MyProg2016, а при создании папок далее - уже возвращает !

Ответов - 4

Haz: Andrey пишет: C:\Program Files для Win8.1 и выше ? Сделал тест проще. Все создается , Windows 10 установлен на диске D Func Main() MakeDir( "D:\Program Files\ABC") Return nil

Dima: Andrey пишет: IsDirectory( cDir ) Возможно глючит функция. Замени ее на HB_DIREXISTS

Andrey: Dima пишет: Замени ее на HB_DIREXISTS Заменил. Всё равно не работает. Сделал как у тебя ABC и запустил из под Еxplorer (до этого запускал из под Far ). При создании папки С:\Program Files\ABC выдает 5 (типа папка существует) Запустил прогу с правами админа, выдаёт окно подтверждения и далее вообще фигня: Вспомнил что проекты собираю на диске подключённым через SUBST. Переписал ехе-ник на диск D: - под админом стал создавать папки нормально ! Без админского доступа папки так и не создает ! Это нормально для Win8.1 или нет ?


krutoff: У меня, начиная с Windows 8, начался трабл с созданием папок (особенно внутри Program Files) и с копированием файлов в корень диска C. Решалось все только под админом и/или указанием в свойствах папки владельцем себя.



полная версия страницы