On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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 для текущего пользователя

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5610
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.12.17 19:54. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
МиниГуи нигде явно не использует папку C:\WINDOWS\TEMP


Это хорошо !

Как только разберусь с компом заказчика - отпишусь здесь.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1134
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.12.17 21:10. Заголовок: Andrey пишет: Как т..


Andrey пишет:

 цитата:
Как только разберусь с компом заказчика - отпишусь здесь


Ждём продолжения увлккательной истории про комп заказчика.
Но вот здесь ей не место, т. к. никакого отношения к теме ветки она не имеет.
Это не MiniGui, это даже не просто GUI, я даже стесняюсь предположить что это и не
harbour. Скорее всего это ближе к админству Windows и настройках прав пользователей
или банальной проверке а был ли мальчик папка

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1334
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 05.12.17 21:25. Заголовок: Andrey, в любой винд..


Andrey, в любой винде есть переменная среды %USERPROFILE%, указывающая на папку профиля пользователя. В ней пользователь имеет полные права. Там можно создавать/изменять/удалять любые папки/файлы с правами текущего пользователя. И, как заметил Haz, Minigui и Harbor тут не при чем.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6648
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.12.17 22:32. Заголовок: Has пишет: Но вот з..


Has пишет:

 цитата:
Но вот здесь ей не место, т. к. никакого отношения к теме ветки она не имеет.


Аминь :)

Двинул тему.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 ?
Хотя ещё нужно проверять что там за права доступа к этой папке...
Можно ли получить средствами Харбора - права доступа к папке ?



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 защищает много системных папок. Так туда просто не надо лезть.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1335
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 06.12.17 10:29. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли получить средствами Харбора - права доступа к папке ?


Это не нужно. Просто используй для временных файлов те папки, в которых заведомо у пользователя есть права.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1135
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.12.17 10:49. Заголовок: Andrey пишет: На д..


Andrey пишет:

 цитата:
На других системах WinXP/7 проблем меньше.
Просто хотел убедиться насчёт C:\WINDOWS\TEMP


Андрей, даже на Win7 к папке C:\WINDOWS\TEMP требуются права администратора.
Видимо у клиента впервые нормальный админ попался и не стал раздавать админскую учетку всем попало.
Самый простой выход - использовать GetMyDocumentsFolder() и делай там что хочешь


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1199
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.12.17 11:46. Заголовок: Haz пишет: Самый пр..


Haz пишет:

 цитата:
Самый простой выход


По итогам обсуждения добавил новую функцию GetUserTempFolder(), которая возвращает путь к скрытой папке для временных файлов текущего пользователя

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1136
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.12.17 11:59. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
По итогам обсуждения добавил новую функцию GetUserTempFolder()


Не так ?
#xtranslate GetUserTempFolder() => GetEnv("TEMP")

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5612
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.12.17 12:01. Заголовок: Спасибо всем за разъ..


Спасибо всем за разъяснения !
Я учту ваши рекомендации.

За отдельную функцию - БОЛЬШОЕ спасибо !
В других своих программах я пользовался всегда таким путём:
   cDirTemp := C_getspecialfolder(0x0028)+"\Local Settings\Temp\МояПрограмма\"




Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1200
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.12.17 12:04. Заголовок: Haz пишет: Не так ?..


Haz пишет:

 цитата:
Не так ?



 цитата:
iif( IsVistaOrLater() , GetUserProfileFolder() + "\AppData\Local\Temp" , cFilePath( GetTempDir() ) )


Если эта функция окажется полезной, то тогда можно будет заменить в ядре вызовы функции GetTempFolder() на GetUserTempFolder()

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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" )


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 возвращает правильно отформатированную строку, которая указывает полный путь на основе порядка поиска переменных окружения, как указано ранее. Приложение должно проверять наличие пути и соответствующие права доступа к пути до любого использования для операций ввода-вывода файлов.
Вот этого я и не делал ! Не знал об этом ранее.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6649
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.12.17 17:41. Заголовок: Pasha пишет: hb_FNa..


Pasha пишет:

 цитата:
hb_FNameMerge( GetEnv("TEMP"), "LCheck.bmp" )


Так тоже покатит.
GetEnv("TEMP")+"\LCheck.bmp"

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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\ ?



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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\ ?



Андрей, про короткие имена файлов ты никогда не слышал, или уже успел забыть ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5620
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.12.17 16:42. Заголовок: Pasha пишет: Андрей..


Pasha пишет:

 цитата:
Андрей, про короткие имена файлов ты никогда не слышал, или уже успел забыть ?


Да уже забыл ...
Просто на этом компе возврат идёт короткого имени, а на других идёт нормально.
Вот и спрашиваю, от каких настроек это зависит ?
Функция одна, а возврат результата разный.
Или я ошибаюсь...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3646
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.12.17 18:20. Заголовок: У меня возвращает: T..


У меня возвращает:
TEMP=C:\Users\User\AppData\Local\Temp

Иногда короткое и длинное имя совпадает, если оно короткое и не содержит русских символов.
А насчет настроек: наверное, мелкомягкие просто прозевали, и оставили этот рудимент (короткие имена) в SET TEMP
Но разницы никакой нет: короткое и длинное имя обрабатывается одинаково.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 33
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет