Чтение файла с использованием VBScript на терминальном сервере

Поднял это как новый пост, как и просили.

Этот сценарий делает именно то, что я хочу на локальном ПК: добавляет текстовый файл, помещает его в текстовое поле для подтверждения, после подтверждения добавляет текст в тему электронного письма. Но когда тот же скрипт запускается на терминальном сервере, он не может найти файл. Любая идея, почему он не может видеть файл и почему это не будет работать на терминальном сервере?

Как я уже сказал, все локальные установки Outlook работают нормально, он может найти файл email.txt, но на терминальном сервере этого не происходит. Я подтвердил, что файл находится в папке.

    Const ForReading = 1, ForWriting = 2
    Dim fso, f
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(Environ("USERPROFILE") & "\temp\email.txt")
    ReadAllTextFile = f.ReadAll
End Function

Public Sub UpdateSubject()
    Dim SaveCode As String
    Dim KeyWord As String
    Dim objItem As MailItem

    KeyWord = "ABD"

    SaveCode = InputBox("Please enter filecode in the format nnn/nnn", "VisualFiles Auto Save", ReadAllTextFile)
    MsgBox SaveCode
    Set objItem = GetCurrentItem()
    objItem.Subject = "[" + KeyWord + "=" + SaveCode + "] " + objItem.Subject
End Sub

Function GetCurrentItem() As Object
    Dim objApp As Outlook.Application

    Set objApp = Application
    On Error Resume Next
    Select Case TypeName(objApp.ActiveWindow)
        Case "Explorer"
            Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
    End Select
    Set objApp = Nothing
End Function

Если я сообщу о местоположении, как показано ниже, это даст мне правильное местоположение, например C:\users\bobby\temp\email.txt.

MsgBox (Environ("USERPROFILE") & "\temp\email.txt")

person Craig Parkinson    schedule 12.02.2019    source источник
comment
Ваш код а) неполный и б) недопустимый VBScript, поэтому явно невозможно, чтобы код (как VBScript) успешно выполнялся где бы то ни было. Возможно, вы имели в виду VBA? Установлен ли Outlook на терминальном сервере?   -  person Ansgar Wiechers    schedule 12.02.2019
comment
Вы правы, молодой человек, это VBA, а не VBS, шиз (ударяет головой по столу) я действительно новичок в этом кодировании VBS c # VBA, я разработчик визуальных файлов, а не программист, но меня попросили посмотреть, смогу ли я заставить это работать . да Outlook установлен и макрос и кнопка работают нормально но просто не читает файл   -  person Craig Parkinson    schedule 12.02.2019
comment
Ваш код все еще неполный, он начинается в середине функции. Однако вы уверены, что файл Environ("USERPROFILE") & "\temp\email.txt" существует? Папка temp для Windows (обычно) не находится непосредственно в папке UserProfile (отметьте environ("Temp"), поэтому ее необходимо создать вручную.   -  person FunThomas    schedule 12.02.2019
comment
Функция ReadAllTextFile() Const ForReading = 1, ForWriting = 2 Dim fso, f Set fso = CreateObject(Scripting.FileSystemObject) Set f = fso.OpenTextFile(Environ(USERPROFILE) & \temp\email.txt) ReadAllTextFile = f.ReadAll End Функция   -  person Craig Parkinson    schedule 12.02.2019
comment
пользовательская среда - c:\users\%username%, что является результатом добавления к этому \temp\email.txt, создает правильное расположение файла. местоположение файла существует файл существует обмен сообщениями расположение файла правильно правильно тот же сценарий отлично работает при локальной установке   -  person Craig Parkinson    schedule 12.02.2019


Ответы (1)


Хорошая новость для вас. Причина, по которой код VBA не работал на терминальном сервере, заключалась в том, что на терминале не была установлена ​​​​следующая DLL.

C:\Program Files (x86)\Microsoft Office\Office14\OUTLVBS.DLL

Исправить это было так же просто, как скопировать с рабочего ПК на то же место на терминальном сервере. перезагрузите сервер. Так что скрипт работает нормально

person Craig Parkinson    schedule 13.02.2019