command-line - InstallShield LaunchAppAndWait nltest
问题描述
我需要在安装过程中找出域用户输入的域控制器名称。在命令行中,我可以使用命令“nltest /dcname:”
当试图在 installshield 脚本中使用它时,我遇到了各种各样的问题。
拳头我试过这个:
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 命令、转义符号和引号的所有组合,但没有成功……知道如何成功存储 nltest 的输出吗?
解决方案
这是否必须在安装期间完成,或者您可以在安装应用程序启动后执行此操作?
Win32:对该 EXE 进行快速依赖项扫描会发现许多 Win32 函数和托管 API,可以使用这些函数NTDSAPI.dll
和LOGONCLI.DLL
.
一些文档可以在这里找到:
- DsGetDomainControllerInfo (pinvoke.net: DsGetDomainControllerInfo )
- DsEnumerateDomainTrusts (pinvoke.net: DsEnumerateDomainTrusts )
更多功能:
System.DirectoryServices.ActiveDirectory
替代托管API:.
从 C++ dll 或 Installscript 调用这些 Win32 函数应该相对容易。
快速建议:与其花很多时间在 C 风格的 API 上(这可能需要几个小时),我更喜欢掠夺 github.com 以获得可以适应的快速示例。那只是我看到的第一件有意义的事情。如果你看应该会好很多。
推荐阅读
- ssl - 使用 ubuntu 将 .password 文件添加到 .p12 文件
- c - c语言中带有信号量的多线程printf()
- c++ - 抽象类继承C++中的另一个抽象类
- verilog - 检查genvar在verilog中是否为奇数
- python - 基于 2D 选择数组(带有索引值)选择 3D 数组中的值
- python - 如何在jupyter笔记本中使用循环在groupby值上获取单独的折线图
- java - 为什么喀土穆的偏移量为 0?TimeZones 中是否存在错误?
- scala - 如何在数据集中添加关注者的数量(最活跃的用户)
- mysql - 如何使用 join 获取使用 mysql 的最近 15 天未售出的产品。
- c# - 找到未填充 StreamGeometry 和 RectangleGeometry 之间交集的可靠方法