- редактировать свои свойства проекта, чтобы сделать ваше приложение по "Windows Application" (не "консольное приложение"). Вы все равно можете принимать параметры командной строки. Если вы этого не сделаете, откроется окно консоли, когда вы дважды щелкните значок приложения.
- Убедитесь, что функция
Main
принимает параметры командной строки.
- Не показывайте окно, если вы получаете параметры командной строки.
Вот краткий пример:
[STAThread]
static void Main(string[] args)
{
if(args.Length == 0)
{
Application.Run(new MyMainForm());
}
else
{
// Do command line/silent logic here...
}
}
Если ваше приложение уже не структурированы, чтобы аккуратно делать бесшумный обработки (если вся ваша логика застревает в код WinForm), вы можете hack silent processing in ala CharithJ's answer.
EDIT by OP Извините, что захватил ваш ответ Мерлин. Просто хочу всю информацию здесь для других.
Чтобы иметь возможность писать на консоль в приложении WinForms просто сделать следующее:
static class Program
{
// defines for commandline output
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
// redirect console output to parent process;
// must be before any calls to Console.WriteLine()
AttachConsole(ATTACH_PARENT_PROCESS);
if (args.Length > 0)
{
Console.WriteLine("Yay! I have just created a commandline tool.");
// sending the enter key is not really needed, but otherwise the user thinks the app is still running by looking at the commandline. The enter key takes care of displaying the prompt again.
System.Windows.Forms.SendKeys.SendWait("{ENTER}");
Application.Exit();
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new QrCodeSampleApp());
}
}
}
вы можете абсолютно использовать то же самое приложение. Просто добавьте 'string [] args' к вашему основному методу –
Или, посмотрите ответы на этот вопрос: http://stackoverflow.com/questions/1179532/ –
Поскольку вы не просите о чтении ввода с консоли (только из параметров командной строки), это обман. –