У меня есть 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"
.
Это интеграция с унаследованной системой, поэтому заменить виртуальные виртуальные системы просто слишком сложно.