Запуск VBScript из основного API C# do tnet - PullRequest
1 голос
/ 12 марта 2020

У меня есть ASP. NET Core API, работающий в IIS на сервере приложений, который должен иметь возможность запускать серию VBScripts, которые открывают, заполняют и печатают несколько документов. Пул приложений, используемый API, имеет свой идентификатор, установленный для пользователя домена с разрешениями, необходимыми для успешного запуска сценариев, Fooser. Если я вхожу в систему как этот пользователь и запускаю сценарий Bar.vbs, он успешно выполняется.

Когда я пытаюсь запустить Bar.vbs из API, используя Process, при попытке открыть шаблон документа. Я добавил в лог Bar.vbs свойства WScript.Network Username и, конечно же, это Fooser (или любого другого пользователя, которого я установил).

C:\Company\CompanyDocuments\Scripts\Bar.vbs выглядит так :

' -- Script Start

Set logShell = CreateObject("WScript.Shell")
Set objWord = OpenWord("C:\Company\CompanyDocuments\test.doc")
Set EVENT_INFORMATION = 4

' -- Script End

Function OpenWord(wrdDoc2Open)
Dim Word
Const wdDialogFilePrintSetup = 97
Set Word = CreateObject("Word.Application")
logShell.LogEvent EVENT_INFORMATION, "Test 1: opened word"
Word.Visible= True
' Set Options in Word to try to speed up document processing.
With Word.Options
        .CheckSpellingAsYouType = False
        .CheckGrammarAsYouType = False
        .SuggestSpellingCorrections = False
        .SuggestFromMainDictionaryOnly = False
        .CheckGrammarWithSpelling = False
        .ShowReadabilityStatistics = False
End With
logShell.LogEvent EVENT_INFORMATION, "Test 2: opening document " & wrdDoc2Open
logShell.LogEvent EVENT_INFORMATION, "Test 2.1: User" & CreateObject("WScript.Network").UserName

Set g_objDoc = Word.documents.Open(wrdDoc2Open,,True)

If Err Then 
    logShell.LogEvent EVENT_INFORMATION, "Test Error."
End If

logShell.LogEvent EVENT_INFORMATION, "Test 3: opened document"
Set OpenWord = Word
End Function

И процесс, выполняемый API:

var scriptProcess = new Process
{
    StartInfo =
    {
        FileName = @"cscript",
        WorkingDirectory = scriptsPath.ToString(),
        WindowStyle = ProcessWindowStyle.Normal,
        Arguments = $"//B //Nologo {fileName} {(arguments.Count != 0 ? string.Join(' ', arguments) : string.Empty)}"
    }
};
scriptProcess.Start();
scriptProcess.WaitForExit();
scriptProcess.Close();

Процесс успешно запускает сценарий, но сценарий завершается ошибкой, не достигнув либо "Test Error." или операторы "Test 3: opened document".

Это интеграция с унаследованной системой, поэтому заменить виртуальные виртуальные системы просто слишком сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...