InstallShield LaunchAppAndWait nltest - PullRequest
       13

InstallShield LaunchAppAndWait nltest

0 голосов
/ 22 октября 2018

Мне нужно выяснить имя контроллера домена при вводе данных пользователем домена.в командной строке я могу использовать команду "nltest / dcname:"

, когда пытаюсь использовать это в скрипте installshield, я сталкиваюсь со всевозможными проблемами.

fist Я пробовал это:

strCmdLine = "/C \"nltest /dcname:" + strDomain + " \" > output.txt"; LaunchAppAndWait("cmd.exe", strCmdLine, LAAW_OPTION_WAIT | LAAW_OPTION_SHOW_HOURGLASS | LAAW_OPTION_HIDDEN);

файл output.txt создан, но он пуст.

Я также пытался использовать LAAW_SHELLEXECUTEVERB = "runas";

далее я пытался это сделать:

strCmdLine = "/C \"c:\\Windows\\System32\\nltest.exe /dcname:" + strDomain + "\""; LaunchApplication("c:\\Windows\\System32\\cmd.exe", strCmdLine, "C:\\Windows\\System32\\", SW_NORMAL, INFINITE, LAAW_OPTION_WAIT | LAAW_OPTION_USE_SHELLEXECUTE)

Я получаю ошибку 'c:\Windows\System32\nltest.exe' is not recognized as an internal or external command, operable program or batch file., понятия не имею почему.

Я безуспешно пробовал все комбинации различных команд LaunchApp, escape-символов и кавычек.... есть идеи, как успешно хранить вывод nltest ??

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Хотя предложение по поиску API вместо EXE - это хорошо, это не отвечает на ваш вопрос.Я начну с части 2: почему он не может найти nltest.exe?

Вероятно, потому что, по крайней мере, если это похоже на мою 64-битную систему, nltest.exe находится только в (64-битной системе).) Папка System32.Он не находится в (32-разрядной) папке SysWOW64.Поскольку механизм InstallScript представляет собой 32-разрядный процесс, все попытки обратиться к C: \ Windows \ System32 перенаправляются в C: \ Windows \ SysWOW64.Вы можете проверить эту теорию в командной строке, запустив C: \ Windows \ SysWOW64 \ cmd.exe (32-разрядная командная строка) и набрав там свои команды.

Вы можете обойти это одно из двухспособы: Отключить / Включить (WOW64FSREDIRECTION), позволяя WINSYSDIR64 означать правильную вещь или заменить Sysnative на System32 в жестко заданном пути.Обратите внимание, что последний должен использоваться только в 64-битной операционной системе 32-битным процессом, так как в противном случае Sysnative - это просто отсутствующая папка.Напротив, вызов Disable / Enable (WOW64FSREDIRECTION) не должен ничего делать в 32-битной системе.

Возвращаясь к части 1, почему он создал пустой файл output.txt?Просто магия того, как работают вызовы процесса cmd с перенаправлениями.Сначала он создает файл и подключает его к выводу процесса, который он собирается создать.Затем (согласно вышеописанному) процесс не запускается, поэтому ничего не добавляется.Наконец, поскольку только стандартный вывод был перенаправлен, а окна были скрыты, не было возможности сообщить вам об ошибке.

0 голосов
/ 22 октября 2018

Это необходимо сделать во время установки или после установки при запуске приложения?


Win32 : создание быстрой зависимостипри сканировании этого EXE-файла обнаруживается ряд функций Win32 и управляемых API-интерфейсов, которые можно использовать вместо реализованных в NTDSAPI.dll и LOGONCLI.DLL.

Некоторая документация может бытьнайдено здесь:

Дополнительные функции:


Альтернативный управляемый API : System.DirectoryServices.ActiveDirectory.


Вызов этих функций Win32 должен быть относительно простым из DLL C ++ или Installscript.

Быстрое предложение : Вместо того, чтобы тратить много времени на API в стиле C (что может занять несколько часов), мне нравится грабить github.com за быстрый образец, который можно адаптировать ,Это было только первое, что я увидел, что имело какой-то смысл.Там должно быть намного лучше, если вы посмотрите.

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