Рейтинг:
0
Jochen Arndt
System.IO.Path.GetDirectoryName
возвращает путь без задней косой черты. Так что вы должны использовать
psi.FileName = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + @"\" + batfile;
Но обратите внимание, что существует исключение из этого правила, когда исполняемый файл находится в корневом каталоге. См. также пример выходных данных по адресу
Метод Path. GetDirectoryName (String) (System.IO)[
^].
shreyassv
Я попробовал это сделать,но ничего не вышло
NotPolitcallyCorrect
Используйте свой отладчик, чтобы выяснить, что означает "не работает".
shreyassv
его запуск bat-файла без + @ " \ " + и с+@"\"+, расположение bat является правильным. Но его неспособность выполнить шаги внутри пакетного скрипта. Но это работает, когда я щелкаю правой кнопкой мыши на bat-файле и запускаю его от имени администратора.
bat файл код ниже
@ECHO ПОЖАЛУЙСТА, НЕ ЗАКРЫВАЙТЕ ЭТО ОКНО
@ЭХО ********************************
@ECHO OFF
Пуск /ждем команды DISM /онлайн /включение функция параметр /FeatureName:ИИС-ApplicationDevelopment параметр /FeatureName:ИИС-АСП параметр /FeatureName:ИИС-Паш параметр /FeatureName:ИИС-обычную проверку подлинности параметр /FeatureName:ИИС-в CGI-параметр /FeatureName:ИИС-ClientCertificateMappingAuthentication параметр /FeatureName:ИИС-CommonHttpFeatures параметр /FeatureName:ИИС-CustomLogging параметр /FeatureName:ИИС-Документ_по_умолчанию параметр /FeatureName:ИИС-DigestAuthentication параметр /FeatureName:ИИС-DirectoryBrowsing параметр /FeatureName:ИИС-FTPExtensibility параметр /FeatureName:в IIS FTP-сервера параметр /FeatureName:службы IIS-FTPSvc
Jochen Arndt
Мне очень жаль, но "не работает" не может быть решена, потому что у меня нет доступа к вашей системе, чтобы увидеть, что происходит.
Все, что я могу предложить, это сделать несколько тестов, чтобы узнать, что не работает:
- Проверьте имя файла, наличие файла и разрешен ли доступ
- Используйте простой пакетный файл, который не требует прав администратора, чтобы проверить, возможно ли выполнение пакетных файлов таким образом (однако это должно быть)
- Используйте Процесс.Exitcode содержит
- Создайте окно оболочки, чтобы увидеть, что происходит (используйте операторы echo в пакетном файле)
- Если окно оболочки просто мигает (немедленно закрывается), попробуйте оставить его открытым (например, дождавшись нажатия клавиши в пакетном файле)
shreyassv
Спасибо. Я обнаружил проблему, моя программа вызывала 32-битный dism, но моя система имеет 64-битную операционную систему. поэтому я сделал несколько изменений, чтобы определить архитектуру системы и вызвать dism на ее основе
AkashDaniel
та же проблема и здесь
можете ли вы объяснить, как вы это делаете?
Рейтинг:
0
shreyassv
string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "dism.exe");
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems, %windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative folder.
system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative", "dism.exe");
}
определяет архитектуру системы и соответственно использует DISM