2015-06-09 5 views
3

Инструмент «Ksetup.exe» используется для настройки сервера KDC на машине Windows; Link1, Link2;Выполняет командную команду «ksetup.exe» программно

Этот инструмент присутствует в 'C: \ Windows \ System32 \'; Найдите image;

Это может быть выполнено в командной строке непосредственно, чтобы получить результат установки KDC в машине; (Проверьте изображение)! [KDC executed]

Мне нужно выполнить эту команду программно через C#; Я попытался использовать класс ProcessInfo с кодом ниже; Но я не мог получить результат только для этой команды; Я имею в виду, я могу иметь возможность получить результат всех других команд я пытался (как Ipconfig, имя хоста ,.)

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 \ nпеременная программа или командный файл. "

Какое изменение мне нужно в моем коде для выполнения команды?

Edit - С обходной решения

Эта проблема возникает потому, что мы пытаемся получить доступ к файлу, принадлежащий "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

_ "Этот инструмент присутствует в 'C: \ Windows \ System32'" _ - это действительно или находится в переадресованной папке SysWOW64? – CodeCaster

+1

Похоже, что путь неправильный. Вы пытались использовать абсолютный путь к ksetup? – AlG

+0

Согласитесь с @AI G, отлично работает для меня. – PrinceT

ответ

1

Хотя ОП указал разрешение, переместив приложение в другую папку и предположив, что проблема связана с разрешениями, я хотел бы предложить другой ответ, основанный на определенном тестировании этой проблемы.

Я сильно подозреваю, что исполняемый файл обстрела в этом случае был либо x86, либо AnyCPU/X64 с включенным «Предпочитаемый 32-разрядный код».

ksetup.exe - это 64-разрядный исполняемый файл. Если приложение, пытающееся «вызвать» ksetup, 32-битное и пытается запустить приложение из папки c: \ Windows \ System32, Windows будет прозрачно пытаться запустить это приложение из папки C: \ Windows \ Syswow64. Вот почему ошибка «ksetup не распознана ...» - подсистема попыталась найти файл в c: \ Windows \ SysWow64, и его там не было.

Перемещение ksetup на SysWow64 является не стартером, потому что это изначально 64-разрядное приложение, и зависимости из этой папки не будут корректными для поддержки приложения.

Решение, я почтительно предлагаю, либо пометить исполняемый исполняемый файл как AnyCPU или x64, так и «Предпочитаю 32-бит» явно не отмечен.

Я пробовал решение самостоятельно с помощью исполняемого файла ksetup и воспроизвел эти результаты, изменив исполняемый файл между 32- и 64-разрядными, как указано. Установка исполняемого исполняемого файла для 64-разрядного или AnyCPU.

+0

спасибо за информацию; Я проверю; –

+1

Извините за поздний ответ; Фактическое решение, «Предпочитаю 32-бит», явно неконтролируемое, является правильным решением; Отмечено как ответ; :) –

+0

Удивительный! Рад, что я смог помочь. –

Смежные вопросы