2016-11-28 8 views
0

У меня есть простая программа, которая читается в базовом файле конфигурации, который содержит предоставленный пользователем путь. Я пытаюсь использовать этот путь для вызова системы для выполнения .bat, который находится в указанном месте. Я могу передать сохраненный путь непосредственно в систему, и он пытается запустить .bat отлично, но ему нужно попробовать запустить его как администратор. Я наткнулся на следующее сообщение: How to call system() in an opened administrator program and gives it the same privileges?Правильный синтаксис пути для вызова системы() (как admin) для выполнения .bat из определенного места?

Я строю строку, как указано в приведенном выше сообщении, но когда я пытаюсь передать эту новую строку в систему, она сообщает мне: «Система не может найти указанный файл». Вот (скорее всего, неправильный) способ я строю строку, которую я передаю в систему.

std::string adminFilePath = "runas /user:<admin-user> \""; 
adminFilePath.append(configFileSettings.path.c_str()); //Append the path of the file that we got from the config file. 
adminFilePath.append("\""); 
system(adminFilePath.c_str()); 

Мое предположение, что я должен пытаться построить основную строку, представляющую то, что я типа прямо в окне CMD, чтобы выполнить .bat, но, очевидно, я не так-то.

+0

Если распечатать 'adminFilePath' это выглядит действительным? Что произойдет, если вы попытаетесь запустить его вручную? – NathanOliver

+0

Когда я печатаю 'adminFilePath' это выглядит, как я жду его ... ' RunAs/пользователь: «C: \ Windows \ batFile.bat» ' Путь выглядит идентично отпечатке я выйдя из 'configFileSettings.path.c_str()' Если я вызываю 'system (configFileSettings.path.c_str()),' он отлично исполняет .bat. пытаясь вызвать 'system (adminFilePath.c_str());' приводит к тому, что «System не может найти указанный файл» – WannabeCoder

+0

Что произойдет, если вы просто скопируете его и используете 'system (R" (runas/user: "C: \ Windows \ batFile.bat ")"); '? Обратите внимание, что это функция C++ 11. – NathanOliver

ответ

0

Проверьте имя файла, чтобы вы не использовали ни одного. Проверьте текущую папку для программы, которую вы запускаете, если путь относительный. Не используйте систему ... особенно если у вас есть не такие имена папок/файлов. system() - это древняя попытка реализовать функцию posix и поддерживает только ANSI и может быть смущена также современными цитируемыми аргументами. Используйте execve или spawn.

В самом деле, вы можете избежать запуска Runas на всех Requesting administrator privileges at run time