Автор | Сообщение |
|
| постоянный участник
|
Пост N: 5609
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.12.17 15:09. Заголовок: Windows10 and MiniGui ....
Есть программа написанная на МиниГуи давно, года 4 назад. Прога создаёт архив в папке C:\WINDOWS\TEMP и отправляет мне на сайт. Проблема появилась в Win10. Архив в папке C:\WINDOWS\TEMP создаётся, но получить размер файла в папке не могу, функция FILESIZE(cFileArxiv) выдаёт ошибку -1. А может и файл и не создаётся. Проверить точно не успел. При смене папки - функция возвращает правильный размер и прога нормально работает. Я так понимаю в Windows10 идёт блокировка на некоторые операции с папкой C:\WINDOWS\TEMP Не знаю какая установлена Windows10 у заказчика, но у меня прога нормально работает и под Windows10 Просьба учесть/отказаться для МиниГуи от операций с работой в папке C:\WINDOWS\TEMP
|
|
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|
|
| moderator
|
Пост N: 1198
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.12.17 15:48. Заголовок: Andrey пишет: учест..
Andrey пишет: цитата: | учесть/отказаться для МиниГуи от операций с работой в папке C:\WINDOWS\TEMP |
| МиниГуи нигде явно не использует папку C:\WINDOWS\TEMP, в ядре используется только папка, которую вовращает функция GetTempFolder(). Эта установка может быть изменена с помощью указания новой константы TEMP для текущего пользователя
|
|
|
|
| постоянный участник
|
Пост N: 5610
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.12.17 19:54. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | МиниГуи нигде явно не использует папку C:\WINDOWS\TEMP |
| Это хорошо ! Как только разберусь с компом заказчика - отпишусь здесь.
|
|
|
|
| |
Пост N: 1134
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.12.17 21:10. Заголовок: Andrey пишет: Как т..
Andrey пишет: цитата: | Как только разберусь с компом заказчика - отпишусь здесь |
| Ждём продолжения увлккательной истории про комп заказчика. Но вот здесь ей не место, т. к. никакого отношения к теме ветки она не имеет. Это не MiniGui, это даже не просто GUI, я даже стесняюсь предположить что это и не harbour. Скорее всего это ближе к админству Windows и настройках прав пользователей или банальной проверке а был ли мальчик папка
|
|
|
|
| постоянный участник
|
Пост N: 1334
Зарегистрирован: 27.01.07
|
|
Отправлено: 05.12.17 21:25. Заголовок: Andrey, в любой винд..
Andrey, в любой винде есть переменная среды %USERPROFILE%, указывающая на папку профиля пользователя. В ней пользователь имеет полные права. Там можно создавать/изменять/удалять любые папки/файлы с правами текущего пользователя. И, как заметил Haz, Minigui и Harbor тут не при чем.
|
|
|
|
| |
Пост N: 6648
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.12.17 22:32. Заголовок: Has пишет: Но вот з..
Has пишет: цитата: | Но вот здесь ей не место, т. к. никакого отношения к теме ветки она не имеет. |
| Аминь :) Двинул тему.
|
|
|
|
| постоянный участник
|
Пост N: 5611
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.12.17 23:55. Заголовок: PSP пишет: Andrey, ..
PSP пишет: цитата: | Andrey, в любой винде есть переменная среды %USERPROFILE%, указывающая на папку профиля пользователя. В ней пользователь имеет полные права. Там можно создавать/изменять/удалять любые папки/файлы с правами текущего пользователя. |
| Спасибо конечно за эти разъяснения, я эти права правил ещё с ХР без проблем. Но что удивило сейчас, что моя прога на МиниГуи под Win10 у нескольких заказчиков (2-3) начинают глючить... Я не знаю как ихний админ устанавливал, может запреты какие то делал. Шишки то на меня сразу катят, а не на админа. А ещё Антивирусы всякие блокируют программу. Получается борьба с системой, а не работа программы. PSP пишет: цитата: | И, как заметил Haz, Minigui и Harbor тут не при чем. |
| С этим полностью согласен. На других системах WinXP/7 проблем меньше. Просто хотел убедиться насчёт C:\WINDOWS\TEMP Почему функция FILESIZE(cFileArxiv) выдаёт ошибку -1 ? Хотя ещё нужно проверять что там за права доступа к этой папке... Можно ли получить средствами Харбора - права доступа к папке ?
|
|
|
|
| Администратор
|
Пост N: 3643
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.12.17 09:08. Заголовок: Andrey пишет: Прось..
Andrey пишет: цитата: | Просьба учесть/отказаться для МиниГуи от операций с работой в папке C:\WINDOWS\TEMP |
| Андрей, ну там же твоя программа ? Ты с своих сырцах можешь посмотреть, в лоб берешь папку C:\WINDOWS\TEMP, или вызываешь GetEnv("Temp") ? Тогда это просьба к самому себе получается ? В чем вопрос то ? Есть стоит папка в лоб, то это во многих случаях не будет работать. Винвовс может жить к примеру в D:\Windows, или C:\WINNT, и тогда не только с win10 будут проблемы, а с любой. А так да, win10 защищает много системных папок. Так туда просто не надо лезть.
|
|
|
|
| постоянный участник
|
Пост N: 1335
Зарегистрирован: 27.01.07
|
|
Отправлено: 06.12.17 10:29. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно ли получить средствами Харбора - права доступа к папке ? |
| Это не нужно. Просто используй для временных файлов те папки, в которых заведомо у пользователя есть права.
|
|
|
|
| |
Пост N: 1135
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.12.17 10:49. Заголовок: Andrey пишет: На д..
Andrey пишет: цитата: | На других системах WinXP/7 проблем меньше. Просто хотел убедиться насчёт C:\WINDOWS\TEMP |
| Андрей, даже на Win7 к папке C:\WINDOWS\TEMP требуются права администратора. Видимо у клиента впервые нормальный админ попался и не стал раздавать админскую учетку всем попало. Самый простой выход - использовать GetMyDocumentsFolder() и делай там что хочешь
|
|
|
|
| moderator
|
Пост N: 1199
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.12.17 11:46. Заголовок: Haz пишет: Самый пр..
Haz пишет: По итогам обсуждения добавил новую функцию GetUserTempFolder(), которая возвращает путь к скрытой папке для временных файлов текущего пользователя
|
|
|
|
| |
Пост N: 1136
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.12.17 11:59. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | По итогам обсуждения добавил новую функцию GetUserTempFolder() |
| Не так ? #xtranslate GetUserTempFolder() => GetEnv("TEMP")
|
|
|
|
|
| постоянный участник
|
Пост N: 5612
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.12.17 12:01. Заголовок: Спасибо всем за разъ..
Спасибо всем за разъяснения ! Я учту ваши рекомендации. За отдельную функцию - БОЛЬШОЕ спасибо ! В других своих программах я пользовался всегда таким путём: cDirTemp := C_getspecialfolder(0x0028)+"\Local Settings\Temp\МояПрограмма\"
|
|
|
|
| moderator
|
Пост N: 1200
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.12.17 12:04. Заголовок: Haz пишет: Не так ?..
Haz пишет: цитата: | iif( IsVistaOrLater() , GetUserProfileFolder() + "\AppData\Local\Temp" , cFilePath( GetTempDir() ) ) |
| Если эта функция окажется полезной, то тогда можно будет заменить в ядре вызовы функции GetTempFolder() на GetUserTempFolder()
|
|
|
|
| Администратор
|
Пост N: 3644
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.12.17 16:20. Заголовок: Функция GetTempDir()..
Функция GetTempDir() уже избыточна, так как есть GetEnv("TEMP"), а GetTempDir() возвращает результат тоже из переменных окружения. Брать в лоб местоположение как GetUserProfileFolder() + "\AppData\Local\Temp" в общем случае вряд ли хорошее решение, так как во-первых есть возможность переопределить папку для Temp, и во-вторых - мало ли что придет в голову этим мелкомягким, может они поменяют папку в следующих версиях. Можно было бы немного улучшить формирование имени файла в папке Temp: Вместо скажем cBmpFile := GetTempFolder() + "\LCheck.bmp" использовать более эффективную конструкцию: cBmpFile := hb_FNameMerge( GetEnv("TEMP"), "LCheck.bmp" )
|
|
|
|
| постоянный участник
|
Пост N: 5615
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.12.17 17:27. Заголовок: Может это - https://..
Может это - https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa364992(v=vs.85).aspx ? Функция GetTempPath проверяет наличие переменных окружения в следующем порядке и использует первый найденный путь: Путь, указанный переменной среды TMP. Путь, указанный переменной окружения TEMP. Путь, указанный переменной среды USERPROFILE. Каталог Windows. Обратите внимание, что функция не проверяет, существует ли путь, и не проверяет, имеет ли текущий процесс какие-либо права доступа к пути. Функция GetTempPath возвращает правильно отформатированную строку, которая указывает полный путь на основе порядка поиска переменных окружения, как указано ранее. Приложение должно проверять наличие пути и соответствующие права доступа к пути до любого использования для операций ввода-вывода файлов. Вот этого я и не делал ! Не знал об этом ранее.
|
|
|
|
| |
Пост N: 6649
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.12.17 17:41. Заголовок: Pasha пишет: hb_FNa..
Pasha пишет: цитата: | hb_FNameMerge( GetEnv("TEMP"), "LCheck.bmp" ) |
| Так тоже покатит. GetEnv("TEMP")+"\LCheck.bmp"
|
|
|
|
| постоянный участник
|
Пост N: 5619
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.12.17 13:04. Заголовок: Haz пишет: Ждём про..
Haz пишет: цитата: | Ждём продолжения увлккательной истории про комп заказчика. Но вот здесь ей не место, т. к. никакого отношения к теме ветки она не имеет. Это не MiniGui, это даже не просто GUI, я даже стесняюсь предположить что это и не harbour. Скорее всего это ближе к админству Windows и настройках прав пользователей или банальной проверке а был ли мальчик папка |
| Ты прав и не прав одновременно ! Это оказывается проблема в библиотеке ZIP Харбора. Но и с меня тоже вины не снимает, так как нужно придерживаться правила: Приложение должно проверять наличие пути и соответствующие права доступа к пути до любого использования для операций ввода-вывода файлов. Разобрался я с компом и со своей программой. Это вторая моя программа была написана ещё в 2013 году. Комп с системой - Windows NT 10.0.15063 Система лицензионная (купленная), Пользователь имеет права обычного пользователя. Использую Harbour MiniGUI Extended Edition 17.11 (32-bit) Для архивирования использовался оператор: COMPRESS aFiles TO cBackupZip ; ....... LEVEL LEVEL_ZIP OVERWRITE STOREPATH ; ... Использовал библиотеки МойПроект.hbp: -lhbmzip -lminizip -lhbzlib Прога честно НЕИЗВЕСТНО КУДА архивировала, а файл самого архива не записывался ! Ошибку при записи не выдавал ! Библиотека создания ZIP наверное древняя с Харбора перенесена. Григорий только там правил hb_ANSIToOEM( cFileToZip ) для меня. Пришлось мне перед архивацией ставить проверку: HB_MemoWrit( cBackupZip, "Проверка записи в папку !" ) IF !FILE(cBackupZip) cMsg := "Отказ доступа к папке ! Не могу записать файл !" + CRLF + CRLF cMsg += cBackupZip + CRLF + CRLF cMsg += 'Обращаться к вашему системному администратору !' + CRLF + CRLF MsgStop( cMsg , MSGTITLE ) MySTRFILE( cMsg , LISTING_PROTOCOL, .T. ) // записать протокол RETURN "" ENDIF И ещё вопрос возник с этим компом. Почему функция GetTempFolder() возвращает C:\Users\USER-K~1\AppData\Local\Temp\ ? Т.е. не полное имя, а обгрызанное - \USER-K~1\ ?
|
|
|
|
| Администратор
|
Пост N: 3645
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.12.17 13:35. Заголовок: Andrey пишет: Прога..
Andrey пишет: цитата: | Прога честно НЕИЗВЕСТНО КУДА архивировала, а файл самого архива не записывался ! Ошибку при записи не выдавал ! |
| Ну это же не архиватор с гуи-интерфейсом, или командной строки, чтобы что-то куда-то выдавать. Это функция hb_ZipFile, которая возвращает результат архивации. Его можно проанализировать, если интересно, создался ли архив или нет. Если неинтересно - можно не анализировать, а сразу писать на форум о непонятной проблеме. цитата: | Библиотека создания ZIP наверное древняя с Харбора перенесена. |
| Так minigui зачем-то тянет с собой много таких библиотек. Правильным решением было бы убрать их из проекта, и рекомендовать использовать соответствующие средства харбора. цитата: | Почему функция GetTempFolder() возвращает C:\Users\USER-K~1\AppData\Local\Temp\ ? Т.е. не полное имя, а обгрызанное - \USER-K~1\ ? |
| Андрей, про короткие имена файлов ты никогда не слышал, или уже успел забыть ?
|
|
|
|
| постоянный участник
|
Пост N: 5620
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.12.17 16:42. Заголовок: Pasha пишет: Андрей..
Pasha пишет: цитата: | Андрей, про короткие имена файлов ты никогда не слышал, или уже успел забыть ? |
| Да уже забыл ... Просто на этом компе возврат идёт короткого имени, а на других идёт нормально. Вот и спрашиваю, от каких настроек это зависит ? Функция одна, а возврат результата разный. Или я ошибаюсь...
|
|
|
|
| Администратор
|
Пост N: 3646
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.12.17 18:20. Заголовок: У меня возвращает: T..
У меня возвращает: TEMP=C:\Users\User\AppData\Local\Temp Иногда короткое и длинное имя совпадает, если оно короткое и не содержит русских символов. А насчет настроек: наверное, мелкомягкие просто прозевали, и оставили этот рудимент (короткие имена) в SET TEMP Но разницы никакой нет: короткое и длинное имя обрабатывается одинаково.
|
|
|
|
| постоянный участник
|
Пост N: 5621
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.12.17 21:25. Заголовок: Pasha пишет: Но раз..
Pasha пишет: цитата: | Но разницы никакой нет: короткое и длинное имя обрабатывается одинаково. |
| Это понятно. Спасибо !
|
|
|
|
|
| постоянный участник
|
Пост N: 5807
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.04.18 15:48. Заголовок: Опять проблема на Wi..
Опять проблема на Win10 и новым МиниГуи. Полдня убил на то чтобы понять что МиниГуи не причём, а наверное Харбор обновили. И ошибку допустили.... У меня в проге есть функция HB_Crypt(cStr,cCryptKey), где я не указал cCryptKey, т.е. он равен NIL (давно уже сделал и забыл). Сейчас эта ошибка (крах программы) стала вылазить ТОЛЬКО под Win10 64bit, на 32bit - ошибка не вылазит.
|
|
|
|
| |
Пост N: 6795
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.04.18 16:44. Заголовок: Andrey пишет: У мен..
Andrey пишет: цитата: | У меня в проге есть функция HB_Crypt(cStr,cCryptKey) |
| Ну так проверь без Минигуи , будет падать или нет.
|
|
|
|
| постоянный участник
|
Пост N: 1801
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.04.18 16:54. Заголовок: Andrey пишет У меня ..
Andrey пишет цитата: | У меня в проге есть функция HB_Crypt(cStr,cCryptKey), где я не указал cCryptKey |
| Странное понимание параметров (шифровать без задания пароля), написано же cCryptKey
|
|
|
|
| |
Пост N: 1220
Зарегистрирован: 20.02.11
|
|
Отправлено: 02.04.18 17:07. Заголовок: Andrey пишет: И оши..
Andrey пишет: цитата: | И ошибку допустили.... У меня в проге есть функция HB_Crypt(cStr,cCryptKey), где я не указал cCryptKey |
| Скорее не допустили , а допустил. Оба параметра в HB_Crypt - обязательны , как и в предшествующей Crypt() из Clipper цитата: | Сейчас эта ошибка (крах программы) стала вылазить ТОЛЬКО под Win10 64bit, на 32bit - ошибка не вылазит |
| Видимо микрософт тут стал строже относится к некорректному указателю на строку. Возможно с каким нибудь обновлением это затронет и х32
|
|
|
|
| |
Пост N: 6796
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.04.18 18:34. Заголовок: Haz пишет: Оба пара..
Haz пишет: цитата: | Оба параметра в HB_Crypt - обязательны |
| Затестил без 2-го параметра , ни чего не упало. Haz пишет: цитата: | Видимо микрософт тут стал строже относится к некорректному указателю на строку. Возможно с каким нибудь обновлением это затронет и х32 |
| Скорее всего.
|
|
|
|
| |
Пост N: 1221
Зарегистрирован: 20.02.11
|
|
Отправлено: 02.04.18 22:02. Заголовок: Dima пишет: Затести..
Dima пишет: цитата: | Затестил без 2-го параметра , ни чего не упало. |
| Да я не к тому что должно упасть, а к тому, что в синтаксисе эти параметры - оба без квадратных скобок. И Сергей, логично спросил, какой тайный смысл шифровать на основании пароля, не указывая пароль. Видимо автор функции, этот смысл тоже не постиг.
|
|
|
|
| постоянный участник
|
Пост N: 5808
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.04.18 11:18. Заголовок: SergKis пишет: Стра..
SergKis пишет: цитата: | Странное понимание параметров (шифровать без задания пароля), написано же cCryptKey |
| Пропустил при переносе из терминалке. Это так, вспомогательная функция была, в новой версии не использую. Сейчас вообще удалил. Просто под 32bit работает без параметра, а в 64bit - падает прога. Пока понял, всю программу отладкой помечал.
|
|
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|