Страницы: 1
RSS
Неоднозначность работы Environ$("%temp%") на различных Windows
 
Добрый вечер...
Сегодня обнаружил для себя такой неприятный момент, как
Код
Environ$("temp")
на машинах с Win <10 выдает один результат
Код
C:\Users\UserName\AppData\Local\Temp
а на машинах c Win=10
Код
C:\Users\UserName\AppData\Local\Temp\N
где N может быть различным. Кто-нибудь сталкивался с этим?
Далее с помощью вот этой нехитрой функции
Код
Public Function Downloading(ByVal URL As String, ByVal LocalPath As String) As Boolean
Dim ADOStream_responseBody As Variant
Dim XMLHTTP_statusText As Variant
On Error Resume Next
  If AppState.FSO.FileExists(LocalPath) Then AppState.FSO.DeleteFile LocalPath, True
  If AppState.FSO.FileExists(LocalPath) Then Downloading = True: Exit Function
  With CreateObject("Microsoft.XMLHTTP")
    .Open "GET", Replace(URL, "\", "/"), "False"
    .Send
    If .Status = 200 Then ADOStream_responseBody = .responseBody
    XMLHTTP_statusText = .statusText
    Downloading = (.Status = 200)
  End With
  If Downloading Then
    With CreateObject("ADODB.Stream")
      .Type = 1
      .Open
      .Write ADOStream_responseBody
      .SaveToFile LocalPath, 2
      .Close
    End With
  Else
'    MsgBox "Can not download file" & Chr(13) & URL & Chr(13) & XMLHTTP_statusText & "!", vbApplicationModal + vbExclamation + vbOKOnly, "Cargill"
    Downloading = False
  End If
'  Downloading = IIf(CBool(Downloading), LocalPath, vbNullString)
End Function
которая "тысячу лет" работала без проблем пытаюсь скачать файл в одну из подпапок Environ$("temp") и получаю
Err.Description = "Write to file failed"
Err.Number = 3004
и это только с машинами на которых стоит Windows 10????
 
Цитата
e_artem написал: где N может быть различным
Win 10-x64, Office 2010-x32. Никаких 'N' не выявлено
Согласие есть продукт при полном непротивлении сторон
 
Я проверял на Win 10 x64 + MSO 2013 x32 и MSO 2016 x32, завтра постараюсь выложить скрины...
Также пробовал в командной строке
echo %temp% - результат, как я описал с N
 
Попробовал и в командной строке - все нормально, никаких 'N'
Согласие есть продукт при полном непротивлении сторон
 
Завтра на свежую голову еще раз поэкспериментирую и выложу скрины...
 
Скрытый текст
 
Можно использовать временные грабли:
Код
Tmp = Environ$("temp")
Lastcoll = Split(Tmp, "\")(UBound(Split(Tmp, "\")))
If Lastcoll <> "Temp" Then
    Result = Replace(Tmp, Lastcoll, "")
Else
    Result = Tmp
End If
 
Название темы должно отражать суть задачи. Предложите новое. Модераторы заменят.
 
А если так записать?
Код
Environ$("tmp")
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
vikttur написал:
Название темы должно отражать суть задачи. Предложите новое. Модераторы заменят.
Новое название темы "Неоднозначность работы Environ$("%temp%") на различных Windows" - хотя эта тема тоже не сильно отражает суть вопроса.


Цитата
Alemox написал:
А если так записать? Код ? 1Environ$("tmp")
Я поэкспериментирую сегодня, но вот, что удалось найти в сети
Изменено: e_artem - 15.08.2017 08:26:46
 
Вот пример с одной из машин с Win 10
 
e_artem, по вашей ссылке есть ответ в комментариях.
the documentation of <i>Administrative TemplatesWindows ComponentsTerminal ServicesTemporary folders</i> contains this gem for "Using Group Policies (best practice):"

To disable the creation of a separate temporary folder for each terminal server session, click Enabled. To enable the creation of a separate temporary folder for each terminal server session, click Disabled

 
Спасибо, я уже прочитал...
И к сожалению, я не могу управлять групповыми политиками, не в моих правах.
Прийдется "свалку" устраивать в другом месте...
 
Ещё вопрос. А в папке Temp вы вообще можете создавать файлы или копировать? Пускай он определяет с подпапкой. Вам тогда необходимо записать условие небольшое и будет счастье. Т.е. У вас предположим определяется путь с подпапкой. вы проверяете адрес, и если в нём присутствует подпапка типа temp\5, то просто откидываете из строковой составляющей \5 и присваиваете новое значение переменной в корень Temp.  
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Ещё вопрос. А в папке Temp вы вообще можете создавать файлы или копировать?
Ограничений в правах в папке Temp или Temp\5 никаких нет...
Цитата
Вам тогда необходимо записать условие небольшое и будет счастье.
По мне - это костыль, котоый когда-нибудь упадет.
Цитата
вы проверяете адрес, и если в нём присутствует подпапка типа temp\5
На каждой машине с Win 10 может быть любой номер, я просмотрел 3-5 машин и везде разные номера подпапок...

В конце концов, я сделал отдельный временный (мусорный) каталог, который при старте приложения создается, а при выходе уничтожается, а то мало ли что еще MS вздумается в будущем, просто не хочется возвращатся к этому вопросу в последствии еще раз, тем более, что как я ранее писал, прав на рулежку групповыми политиками и всеми остальными административными "пожитками" у меня нет.
 
Цитата
На каждой машине с Win 10 может быть любой номер, я просмотрел 3-5 машин и везде разные номера подпапок...
Так я не говорю вам, что откинуть именно \5, я говорю что вам из адреса нужно оставить
C:\Users\UserName\AppData\Local\Temp
Сделайте проверку в этом адресе. И всё что после слова Temp выкиньте.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Спасибо
Цитата
Сделайте проверку в этом адресе. И всё что после слова Temp выкиньте.
Да, как вариант...
Страницы: 1
Наверх