执行&#k; ksetup.exe'命令行命令以编程方式

时间:2015-06-09 12:43:20

标签: c# process

' Ksetup.exe'工具用于在Windows机器中配置KDC服务器; Link1Link2;

此工具位于' C:\ Windows \ System32 \'地点;找到image;

这可以直接在命令提示符中执行,以便在机器中获得已安装的KDC的结果; (查看图片)![KDC executed]

我需要通过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"中存在的文件/命令。以编程方式定位?

1 个答案:

答案 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。