Консольным приложением не был создан файл
Для развертывания программ "Лаборатории Касперского" на сетевых устройствах вашей организации необходимо создать инсталляционные пакеты программ "Лаборатории Касперского" в Kaspersky Security Center Cloud Console.
Чтобы создать инсталляционный пакет программы "Лаборатории Касперского":
- Выполните одно из следующих действий:
- Перейдите в раздел Обнаружение устройств и развертывание → Развертывание и назначение → Инсталляционные пакеты .
- Перейдите в раздел Операции → Хранилища → Инсталляционные пакеты .
Вы также можете просматривать информацию о новых пакетах в списке экранных уведомлений. Если есть уведомления о новом пакете, вы можете перейти по ссылке рядом с уведомлением к списку доступных инсталляционных пакетов.
Отобразится список инсталляционных пакетов доступных на Сервере администрирования.
Запустится мастер создания инсталляционного пакета. Для продолжения работы мастера нажмите на кнопку Далее .
Отобразится список дистрибутивов доступных на веб-серверах "Лаборатории Касперского".
Откроется окно с информацией о дистрибутиве.
Если дистрибутив не может быть автоматически преобразован в инсталляционный пакет, вместо кнопки Загрузить дистрибутив отображается кнопка Загрузить и создать инсталляционный пакет . В этом случае загрузите дистрибутив, а затем используйте загруженный файл для создания пользовательского инсталляционного пакета.
Начинается загрузка инсталляционного пакета. Вы можете закрыть окно мастера или перейти к следующему шагу инструкции. Если вы закроете мастер, процесс загрузки продолжится в фоновом режиме.
Если вы хотите отслеживать процесс загрузки инсталляционного пакета:
- Перейдите в раздел Операции → Хранилища → Инсталляционные пакеты → Идет процесс () .
- Следите за ходом операции в графах Ход загрузки и Состояние загрузки таблицы.
После завершения процесса инсталляционный пакет добавляется в список на закладке Загружено . Если процесс загрузки останавливается и статус загрузки меняется на Принять Лицензионное соглашение , нажмите на имя инсталляционного пакета и перейдите к следующему шагу инструкции.
Если вы планируете выполнить перенос данных из Kaspersky Security Center Web Console в Kaspersky Security Center Cloud Console, использование прокси-сервера для доступа к корпоративной сети может повлиять на перенос данных . После того, как вы создадите инсталляционный пакет Агента администрирования, вам нужно указать параметры прокси-сервера, чтобы обеспечить соединение экземпляров Агента администрирования на управляемых устройствах с рабочей областью Kaspersky Security Center Cloud Console:
- Нажмите на имя установочного пакета.
- В открывшемся окне свойств инсталляционного пакета выберите закладку Параметры .
- Откройте раздел Подключение .
- Выберите параметр Использовать прокси-сервер и заполните поля Адрес прокси-сервера и Порт прокси-сервера .
Загрузка продолжится после принятия Лицензионного соглашения. Если вы нажмете на кнопку Отклонить , загрузка прекратится.
Инсталляционный пакет создан. Инсталляционный пакет появится в списке инсталляционных пакетов.
Сообщается, что пользователи Windows не могут открыть диспетчер устройств, инструмент управления дисками и другие программы в своей системе из-за невозможности создать новый документ .
Полная ошибка читает консоль управления Microsoft; Невозможно создать новый документ . всякий раз, когда пользователь пытается получить доступ к свойствам или настройкам своего компьютера.
Что я могу сделать, если Microsoft Management Console не удается создать новый документ? Первое, что вы можете попробовать - запустить утилиту проверки системных файлов. Это должно иметь дело с очевидным повреждением системы, которое под рукой. В случае повторного появления проблемы, попробуйте проверить ваш профиль пользователя на наличие поврежденных файлов.
Прочитайте подробные инструкции ниже.
- Запустите проверку системных файлов
- Проверьте профиль пользователя на наличие поврежденных файлов
- Сбросить Windows без удаления личных файлов
1. Запустите проверку системных файлов
- Нажмите Windows Key + R, чтобы открыть Run.
- Введите cmd в поле «Выполнить» и нажмите кнопку « ОК», чтобы открыть командную строку.
- В командной строке введите следующую команду и нажмите ввод.
SFC / SCANNOW - Проверка системных файлов просканирует систему на наличие поврежденных файлов и при необходимости исправит их.
- Перезагрузите компьютер и проверьте наличие улучшений.
2. Проверьте профиль пользователя на наличие поврежденных файлов.
Время от времени проблема могла касаться только вашего текущего профиля пользователя. Бывает, что некоторые файлы могут быть повреждены для определенного профиля пользователя. Вы можете войти в альтернативную учетную запись пользователя, чтобы увидеть, является ли ошибка специфичной для пользователя.
Примечание. Для проверки этого метода сначала необходимо создать альтернативную учетную запись пользователя. Если у вас нет альтернативной учетной записи, вот как ее создать.
- Введите Cmd в строке Cortana / Search.
- Щелкните правой кнопкой мыши на « Командная строка » и выберите « Запуск от имени администратора ».
Закройте окно командной строки и войдите с новой учетной записью пользователя. Вот как это сделать.
- Нажмите « Windows Key + L», чтобы заблокировать экран.
- Нажмите на свою альтернативную учетную запись и войдите в систему.
Попробуйте открыть настройки или программу, которая выдавала ошибку. Если ошибка не появляется, вам, возможно, придется создать новый профиль пользователя с правами администратора, поскольку ошибка связана с вашим профилем пользователя.
- Также Читайте: Лучшие антивирусные решения для Windows 10 для использования в марте 2019
3. Сбросить Windows без удаления личных файлов
Если проблема не устранена, возможно, что некоторые системные файлы повреждены и не позволяют системе получить доступ к программам и настройкам. Чтобы устранить проблему, вы можете перезагрузить компьютер, не удаляя ваши личные файлы. Хотя это удалит все установленные приложения, но не удалит ваши личные файлы.
- Нажмите на Пуск и выберите Настройки.
- Нажмите на обновление и безопасность.
- Нажмите на вкладку Восстановление .
После перезагрузки проверьте, устранена ли ошибка. Если нет, возможно, вам придется полностью перезагрузить компьютер и удалить все, включая ваши личные файлы.
Перед заводской настройкой ПК убедитесь, что вы сделали резервную копию ваших личных данных. После создания резервной копии выполните следующие шаги, чтобы снова перезагрузить компьютер.
Вам также понадобится установочный диск Windows или загрузочная флешка Windows 10 для переустановки ОС.
Вставьте загрузочный носитель в ваш компьютер и перезагрузите систему. Следуйте инструкциям на экране для форматирования диска и чистой установки Windows 10.
Вы также можете использовать инструмент чистой установки Windows 10, чтобы сделать то же самое. Хотя для загрузки Windows ISO требуется стабильное подключение к Интернету (до 3 ГБ).
Скачайте и запустите инструмент. Следуйте инструкциям на экране для чистой установки Windows 10.
Что делать, если вы не можете загрузить консоль управления
У вас проблемы с загрузкой консоли управления? Затем следуйте инструкциям, приведенным в этом руководстве по устранению неполадок, чтобы устранить проблему.
Как бы доработать пример так, что сначала вызывается программа с параметрами "openssl.exe -a -b -c . ", далее она ожидает ввода с клавиатуры (если бы её запускать с cmd), нужно её подсунуть содержимое на сотню другую байт (контент), который она зашифрует и выдаст ответ, который и надо считать.
Вот считывание в примере и реализовано, но как бы сделать запись в консоль?
← →
брат Птибурдукова ( 2013-01-14 19:40 ) [1]
Создавай два пайпа. Второй запуздыривай сюда: hStdInput := GetStdHandle(STD_INPUT_HANDLE); // стандартный ввод не перенаправляем
← →
Игорь Шевченко © ( 2013-01-14 19:52 ) [3]
if not WasOK then
raise Exception.Create( "Ошибка выполнения или компиляции: " +
Chr( 10 ) + Chr( 13 ) + CommandLine )
Для интернетов самое то
← →
Игорь Шевченко © ( 2013-01-14 20:01 ) [4]
Ничего не получалось. Это приводило к тому, что консоль отображалась на экране, программа ничего не считывала (после данного кода шло считывание ReadFile).
Возник другой вопрос, почему я запускаю команду "ftp":
дальше стандартный код, подходим к считыванию данных из консоли:
>WasOK := ReadFile( StdOutPipeRead, Buffer, 255, BytesRead, nil );
на этом месте исполнение зависает навсегда. Хотя если в консоле набрать ftp, то мы видим приглашение:
Почему это приглашение "ftp>" не считывается?
Хотя писать можно, да.
Камрады, измучился весь с этим Openssl.exe
Есть такая команда:
> openssl.exe smime -sign -signer public.pem -inkey private.pem -nochain -nocerts -outform PEM -nodetach
Я пробовал после WriteFile делать:
Но ответом идет False с кодом GetLastError = 87, что означает:
"Параметр задан неверно".
После WriteFile делать CloseHandle(StdinPipeWrite) тоже пробовал.
Что делать? Как запустить openssl и передать в него текст, сообщив о конце передачи текста?! (
← →
Игорь Шевченко © ( 2013-01-18 20:39 ) [8]
от безысходности писал также:
тоже не получилось.
← →
брат Птибурдукова ( 2013-01-19 00:43 ) [11]
Попробуй в командной строке выполнить openssl.exe smime -sign -signer public.pem -inkey private.pem -nochain -nocerts -outform PEM -nodetach
> Попробуй в командной строке выполнить openssl.exe smime
> -sign -signer public.pem -inkey private.pem -nochain -nocerts
> -outform PEM -nodetach -in InFile.content
← →
брат Птибурдукова ( 2013-01-19 13:21 ) [13]
> Только в openssl это указывается доп. командой
Так ты уверен, что с перенаправлением вывода всё работает так же корректно, как с дополнительным параметром?
> Так ты уверен, что с перенаправлением вывода всё работает
> так же корректно, как с дополнительным параметром?
да, попробовал сейчас команду:
> openssl.exe smime -sign -signer public.pem -inkey private.pem -nochain -nocerts -outform PEM -nodetach
отработало просто на ура, тут же выдало ответ и вышло из программы openssl.
Причем, для openssl вроде как есть оттестированный рабочий код для PHP, его структура вроде бы понятна и на дельфи нечто такое же получается:
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w")); // stderr is a file to write to
$process = proc_open(
"openssl smime -sign -signer " . $certificate .
" -inkey " . $privkey .
" -nochain -nocerts -outform PEM -nodetach",
$descriptorspec, $pipes);
if (is_resource($process)) <
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
fwrite($pipes[0], $source);
fclose($pipes[0]);
но тем не менее на дельфи изобразить не получается ((
← →
Игорь Шевченко © ( 2013-01-21 00:21 ) [16]
уже код пора выкладывать
try
// Создаём дочерний процесс, используя StdOutPipeWrite в качестве стандартного вывода,
// а так же проверяем, чтобы он не показывался на экране.
with SI do
Begin
FillChar( SI, SizeOf( SI ), 0 );
cb := SizeOf( SI );
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
wShowWindow := SW_HIDE or SW_SHOWMINNOACTIVE;
hStdInput := StdInPipeRead; //GetStdHandle(STD_INPUT_HANDLE);
hStdOutput := StdOutPipeWrite;
hStdError := StdOutPipeWrite;
end;
CommandLine := """ + FAppPath + "" " + FParam ;
sCurDir := ExtractFileDir(FAppPath);
WasOK := CreateProcess( nil,
PChar( CommandLine ),
nil,
nil,
True,
0,
nil,
PChar(sCurDir),
SI,
PI );
FhProcess := PI.hProcess ;
if Line <> "" then
OemToChar(PChar(Line), PChar(FAllRead)) ;>
SetEvent(FeventFinishRead) ;
// ждём, пока завершится консольное приложение
hArray[0] := pi.hProcess;
hArray[1] := FeventTerminate ;
WaitRes := WaitForMultipleObjects(2, @hArray, false, INFINITE);
if WaitRes = WAIT_OBJECT_0 then // значит, терминировался именно процесс запущенный
FStatus := prsEnd ;
FExitCode := 0;
GetExitCodeProcess( pi.hProcess, FExitCode );
finally
// Закрываем все оставшиеся дескрипторы
CloseHandle( PI.hThread );
CloseHandle( pi.hProcess );
end;
end;
finally
SetEvent(FeventFinishRead) ;
CloseHandle( StdOutPipeRead );
if StdInPipeWrite <> 0 then
CloseHandle( StdInPipeWrite );
if StdInPipeRead <> 0 then
CloseHandle(StdInPipeRead);
end;
end;
> WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil );
← →
Игорь Шевченко © ( 2013-01-21 15:34 ) [18]
WaitForInputIdle вставить не поможет перед началом работы с вводом-выводом?
> WaitForInputIdle вставить не поможет перед началом работы
> с вводом-выводом?
вставил перед WriteFile.
WaitForInputIdle(pi.hProcess, INFINITE) возвращает 0xFFFFFFFF.
GetLastError = 18: "Больше файлов не осталось"
Результата не дало.
← →
Игорь Шевченко © ( 2013-01-22 14:41 ) [21]
> // если процесс может быть создан, то дескриптор, это его
> вывод
> CloseHandle( StdOutPipeWrite );
Зачем этот вызов ?
← →
Игорь Шевченко © ( 2013-01-22 14:57 ) [22]
надо закрыть описатели записи в stdout и чтения stdin
Для того чтобы создать консольное приложение, надо в меню File выбрать команду New Project , в появившемся окне New Project выбрать CLR Console Application , в поле Name ввести имя проекта (рис. 6.2) и нажать кнопку OK . В результате этих действий станет доступным окно редактора кода, в котором можно набирать текст программы.
Рис. 6.2. Начало работы над консольным приложением
В качестве примера в листинге 6.2 приведен текст консольного приложения — утилиты clear, которая удаляет из каталога, указанного при запуске утилиты, и всех его подкаталогов tmp-файлы. Также, если при запуске утилиты указан ключ –CLEARDEBUG , утилита удаляет все файлы из всех подкаталогов Debug. Так как операция удаления является потенциально опасной, то утилита запрашивает у пользователя подтверждение на выполнение. Причем, чтобы операция очистки была начата, необходимо ввести Y , ввод любого другого символа, в том числе y , отменяет операцию. Основную работу — удаление файлов выполняет рекурсивная функция сlear. Сначала она обрабатывает (удаляет tmp-файлы) текущий каталог, затем формирует список подкаталогов
Часть II. Практикум программирования
текущего каталога, делает текущим первый (по номеру элементов списка) подкаталог и вызывает себя (рекурсия) для обработки этого подкаталога.
Листинг 6.2. Очистка диска (консольное приложение)
// clear.cpp : main project file.
using namespace System;
using namespace System::IO;
кол-во удаленных файлов
bool debug = true ;
bool clearDebug = false ; //
очистка каталогов Debug
// Очистка текущего каталога и всех его подкаталогов.
// подкаталоги текущего каталога
// файлы, которые надо удалить
int p = System::IO::Directory::GetCurrentDirectory()->
// удалить все файлы из каталога Debug
Files = Directory::GetFiles (System::IO::Directory::GetCurrentDirectory(),"*.*");
Глава 6. Консольное приложение
Files = Directory::GetFiles (System::IO::Directory::GetCurrentDirectory(),"*.tmp");
// удалить tmp-файлы из текущего каталога
Files = Directory::GetFiles (System::IO::Directory::GetCurrentDirectory(),"*.tmp");
int nf = Files->Length; for (i = 0; i if (! debug)
Console::WriteLine(Files[i] + " — удален"); nDel = nDel +1;
// обработать подкаталоги if (debug)
n = Directories->Length; for (i = 0; i if (debug) Console::WriteLine(Directories[i]);
Часть II. Практикум программирования
int main( array ^args)
char r; // ответ пользователя: Y или N
// проверим, указано ли имя файла теста if (args->Length == 0)
Console::WriteLine("Ошибка: Надо задать каталог."); Console::WriteLine("Команда: clear [-CLEARDEBUG]"); Console::WriteLine("-CLEARDEBUG — очистка каталогов Debug
");
Console::ReadLine(); return -1;
// проверим, существует ли указанный каталог try
catch (System::IO::DirectoryNotFoundException^ ex)
Console::WriteLine("Каталог " + path +" не найден");
Console::ReadLine(); return -1;
("Программа удалит все файлы из подкаталогов Debug");
Глава 6. Консольное приложение
Console::WriteLine("каталога "+ path+ " и всех его подкаталогов.");
Console::WriteLine("Программа удалит tmp-файлы");
Console::WriteLine("из каталога "+ path+
" и всех его подкаталогов.");
Console::ReadLine(); return -1;
Console::WriteLine("Удалено файлов: "+ nDel.ToString()); Console::WriteLine("Работа выполнена!"); Console::Write("Нажмите ");
Console::ReadLine(); return 0;
Построение консольного приложения выполняется обычным образом, т. е. выбором в меню Build команды Build Solution .
После успешной компиляции программу можно запустить. Для этого надо в меню Debug выбрать команду Start Debugging или Start Without Debugging .
Если программа должна получать параметры из командной строки, то при ее запуске из среды разработки параметры надо ввести в поле Command Arguments раздела Configuration Properties Debugging окна Property Page
(рис. 6.3), которое становится доступным в результате выбора в меню Project команды Properties . Следует обратить внимание: если в строке-параметре есть пробелы, то ее надо заключить в двойные кавычки.
У меня есть решение, которое имеет 3 проектов. Одним из них является консольным приложением и другие 2 являются окно приложения. Оба окна приложение использует консольное приложение, поэтому я добавил ссылку на консольном приложении в обеих окнах приложений проектов. Теперь, когда я строю окна проектов, консольное приложение копируется в выходной каталог, но проблема в том, что его конфигурационный файл «consoleapp.exe.config» не копируется!
Если бы я использовал библиотеку (сборки) вместо консольного приложения, он будет создан конфигурационный файл этой сборки в папке вывода.
Как решить эту проблему?
Выберите consoleapp.exe.config в дереве решений.
Выберите « Содержимое » для сборки Действие опции в собственности сетки.
Выберите Копировать всегда для копирования в каталог вывода опции.
Надеюсь, что это помогает 🙂
Быстрое создание консольного проекта в VS2008 и добавив « App.config », он имеет параметры:
Строить Действие: Нет
Скопировать в каталог Ouput: Не копировать
пользовательский инструмент:
Пользовательский инструмент Пространство имен:
Однако я не уверен, что эффект добавление ссылки на проект консоли будет иметь, как проект консоли представляет собой приложение, а не библиотеки классов.
Если вы хотите, чтобы консольное приложение для запуска с приложениями Windows, для отладки, то лучше, чем подход ссылок проекта будет установить решение для запуска нескольких приложений. Щелкните правой кнопкой мыши на решения, выберите свойства и на узле Start Project, выберите несколько проектов. (И удалить ссылки на консольное приложение.)
Ваши приложения используют значение по умолчанию для параметров из скомпилированного кода ссылочного проекта.
Вы создали проект консольного приложения C++ и ввели код. Теперь вы можете выполнить сборку приложения и запустить его в Visual Studio. Затем запустите его как автономное приложение из командной строки.
Предварительные требования
Установите и запустите на своем компьютере Visual Studio с рабочей нагрузкой "Разработка классических приложений на C++". Если установка еще не выполнена, следуйте инструкциям в статье Установка поддержки C++ в Visual Studio.
Создайте проект "Hello, World!" и введите его исходный код. Если вы еще не сделали этого, выполните действия, описанные в разделе Создание проекта консольного приложения С++.
Если Visual Studio выглядит следующим образом, можно приступать к сборке и запуску приложения:
Сборка и запуск кода в Visual Studio
Для сборки проекта выберите в меню Сборка пункт Собрать решение. Окно Вывод отображает результаты процесса сборки.
Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки.
Поздравляем! Вы создали свое первое консольное приложение "Hello World" в Visual Studio! Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Выполнение кода в командном окне
Обычно консольные приложения запускаются из командной строки, а не в Visual Studio. После того как приложение будет создано в Visual Studio, его можно запустить из любого командного окна. Вот как можно найти и запустить новое приложение в окне командной строки.
В обозревателе решений выберите решение HelloWorld (а не проект HelloWorld) и щелкните правой кнопкой мыши, чтобы открыть контекстное меню. Выберите Открыть папку в проводнике, чтобы открыть окно проводника в папке решения HelloWorld.
В окне проводника откройте папку Debug. В этой папке содержится ваше приложение, HelloWorld.exe и несколько других файлов отладки. Удерживая нажатой клавишу SHIFT, щелкните правой кнопкой мыши HelloWorld.exe, чтобы открыть контекстное меню. Выберите команду Копировать как путь, чтобы скопировать путь к приложению в буфер обмена.
Чтобы открыть окно командной строки, нажмите Windows + R, чтобы открыть диалоговое окно Выполнить. Введите cmd.exe в текстовом поле Открыть, а затем выберите ОК для запуска окна командной строки.
В окне командной строки щелкните правой кнопкой мыши, чтобы вставить путь к приложению в командную строку. Нажмите клавишу ВВОД, чтобы запустить приложение.
Поздравляем! Вы создали и запустили консольное приложение в Visual Studio.
Следующие шаги
После создания и запуска этого простого приложения можно приступать к более сложным проектам. Дополнительные сведения см. в разделе Использование интегрированной среды разработки Visual Studio для разработки приложений для настольных систем на языке C++. В нем содержатся более подробные пошаговые руководства, посвященные возможностям Microsoft C++ в Visual Studio.
Руководство по устранению неполадок
Здесь приведены решения распространенных проблем, которые могут возникнуть при создании первого проекта C++.
Сборка и запуск кода в Visual Studio: проблемы
Если в редакторе исходного кода отображаются красные волнистые линии, то сборка может содержать ошибки или предупреждения. Убедитесь, что код соответствует примеру в написании, пунктуации и регистре.
Выполнение кода в командном окне: проблемы
Если путь, показанный в проводнике, заканчивается на \HelloWorld\HelloWorld, вы открыли проект HelloWorld вместо решения HelloWorld. Вы перепутаете папку Debug, в которой нет вашего приложения. Перейдите на уровень вверх в проводнике, чтобы открыть папку решения — первый HelloWorld в пути. В этой папке также содержится папка Debug, в которой вы найдете свое приложение.
Можно также открыть папку Debug решения в командной строке, чтобы запустить приложение. Приложение не будет запускаться из других каталогов, если не указан путь к приложению. Однако вы можете скопировать приложение в другой каталог и запустить его из него. Также можно скопировать его в каталог, указанный переменной среды PATH, а затем запустить его из любого места.
Если в контекстном меню отсутствует параметр Копировать как путь, закройте меню, а затем удерживайте нажатой клавишу SHIFT при повторном открытии. Эта команда предназначена только для удобства. Можно также скопировать путь к папке из панели поиска проводника и вставить его в диалоговое окно Выполнить, а затем ввести имя исполняемого файла в конце. При этом потребуется чуть больше действий по вводу текста, но результат будет тем же.
Читайте также: