' Ksetup.exe'工具用于在Windows机器中配置KDC服务器; Link1,Link2;
此工具位于' C:\ Windows \ System32 \'地点;找到;
这可以直接在命令提示符中执行,以便在机器中获得已安装的KDC的结果; (查看图片)!
我需要通过C#以编程方式执行此命令;我尝试使用ProcessInfo类和下面的代码;但我无法仅为此命令获得结果;我的意思是我能够获得我尝试的所有其他命令的结果(如ipconfig,hostname,。)
ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/c ksetup")
{
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
WorkingDirectory = @"C:\Windows\System32"
};
Process p = Process.Start(startInfo);
p.Start();
p.WaitForExit();
当我执行相同的输出消息时,
"' ksetup'不被视为内部或外部 命令,\ r \ noperable程序或批处理文件。"
我的代码执行命令需要哪些更改?
编辑 - 使用解决方案解决方案
出现此问题是因为我们尝试访问属于" C:\ Windows \ System32"的文件。目录;
后来我只是将文件复制并放入" C:\ Windows \ ksetup.exe"位置,它的工作;
其他参考文献:Why do 64-bit DLLs go to System32 and 32-bit DLLs to SysWoW64 on 64-bit Windows?
另一个解决方案是,取消选中"首选32位选项"在项目属性窗口的构建选项卡中;
所以我的问题是我们无法访问" C:\ Windows \ System32"中存在的文件/命令。以编程方式定位?
答案 0 :(得分:1)
虽然OP通过将应用程序移动到另一个文件夹来指示解决方案,并且从该问题推断是权限,但我想根据对此问题的一些特定测试提供不同的答案。
我强烈怀疑这种情况下的触发可执行文件是x86,或启用了“Prefer 32-bit code”的AnyCPU / X64。
ksetup.exe是一个64位可执行文件。如果尝试“生成”ksetup的应用程序是32位,并尝试从c:\ Windows \ System32文件夹启动应用程序,Windows将透明地尝试从C:\ Windows \ Syswow64文件夹运行该应用程序。这就是为什么'ksetup无法识别...'错误 - 子系统试图在c:\ Windows \ SysWow64中找到该文件,但它不在那里。
将ksetup移动到SysWow64是一个非启动器,因为它本身就是一个64位应用程序,并且该文件夹的依赖关系不支持应用程序。
我恭敬地建议,解决方案是将产生的可执行文件标记为AnyCPU或x64,“Prefer 32-bit”明确未选中。
我自己尝试使用ksetup可执行文件解决了这个问题,并通过更改32位和64位之间的可执行文件来重现这些结果。将产生的可执行文件设置为64位或AnyCPU。