Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/78: Рейтинг темы: голосов - 78, средняя оценка - 4.67
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723

Приложение без интерфейса

16.01.2011, 18:57. Показов 14895. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите пожалуйста, как можно создать приложение\программу без интерфейса, то есть что бы не запускалось не окно, не консоль...

начал разбирать исходники sharp develop 2.2, там запускается сначала "ядро", которое запускает все остальное, но так и не смог разобраться как и что там работает... слишком все запутанно... а вот уже окно запускается я так понимаю уже как аддон...

буду признателен, если кто нибудь подробно разъяснит как все это делается.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2011, 18:57
Ответы с готовыми решениями:

Приложение без интерфейса
Яweb программист. подскажите пожалуйста инструменты, а точнее как и в каком виде сохдать приложение или некую службу которое работало...

Серверное приложение: без интерфейса, желательно сервис
Добрый день. В первый раз сталкиваюсь со следующей проблемой, так что даже не знаю в какую сторону копать: Есть серверное приложение на...

Как передать текст в стороннее приложение без установки на него фокуса?
Есть форма на ней баттон и текстбокс, как передать через кнопку то что я написал в текстбоксе например в блокнот или еще куда нибудь без...

11
20 / 20 / 2
Регистрация: 27.08.2009
Сообщений: 71
16.01.2011, 19:18
создай проект виндовсформапликатион и в функции main() удали создание формы, вот то что Вам нужно)
0
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723
16.01.2011, 19:57  [ТС]
Цитата Сообщение от dampir Посмотреть сообщение
создай проект виндовсформапликатион и в функции main() удали создание формы, вот то что Вам нужно)
очень умно) я немного не про это
0
MADE IN USSR
 Аватар для Товарищ
72 / 71 / 0
Регистрация: 01.06.2010
Сообщений: 203
16.01.2011, 19:59
Один вариант знаю - это размер формы в коде 1на1 пиксель задать, у меня так получалось

Всё дошло что ты хочешь, учи ассемблер, ибо C# объектный язык и без frameworka работать не будет, такой вот он запутанный....

А в чём именно не смог разобраться что и как работаетт? Поподробнее с этого момента пожалуйста.
0
 Аватар для Etrimus
399 / 366 / 54
Регистрация: 23.05.2010
Сообщений: 716
16.01.2011, 20:17
Возможно, я не понял, что вам нужно, но что бы сделать приложение, которое вообще не отображается ни в виде консоли, ни в виде формы, я делал так:
Создал Консольное приложение, зашёл в свойства проекта и во вкладке Приложение выставил "Тип выходных данных" - приложение Windows.

По поводу запуска "всего стального"...
Для вынесения кода в другой файл используются динамические библиотеки dll.
0
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
16.01.2011, 20:28
Можно попробовать запускать процесс с опцией WindowStyle = ProcessWindowStyle.Hidden. Окна, по крайней мере, не видно.
Пример:
Файл WinForms:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Net.Sockets;
using System.Windows.Forms;
 
using Services;
 
namespace WindowsFormsApplicationTest2 {
    public partial class MainForm : Form {
        // Путь к запускаемому файлу консольного приложения
        private const string processFileName =
            @"C:\Users\Unril\Documents\Visual Studio 2010\Projects\WindowsFormsApplicationTest2\ConsoleApplicationClient\bin\Debug\ConsoleApplicationClient.exe";
 
        public readonly Process Process;
 
        // Наш удалённый сервис
        private readonly IService remotingService;
 
        public MainForm() {
            InitializeComponent();
 
            // Запускаем процесс без окна
            ProcessStartInfo info = new ProcessStartInfo( processFileName ) {
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process = new Process {
                StartInfo = info
            };
            Process.Start();
 
            // Получаем ссылку на объект от сервера
            remotingService = (IService)Activator.GetObject(
                typeof ( IService ),
                "tcp://localhost:8082/MyRemoteHost" );
        }
 
        private void ButtonOpenClick( object sender, EventArgs e ) {
            try {
                // Загружаем данные
                var bytes = remotingService.ReadFile( @"D:\avatar.png" );
                if ( bytes != null ) {
                    Bitmap bitmap;
                    using ( MemoryStream stream = new MemoryStream( bytes ) ) {
                        bitmap = new Bitmap( stream );
                    }
                    pictureBox1.Image = bitmap;
                }
            }
            catch ( SocketException exception ) {
                MessageBox.Show( exception.Message );
            }
        }
    }
}
Необходимо добавить в Program.cs, чтобы процесс не оставался висеть в памяти:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplicationTest2 {
    static class Program {
        [STAThread]
        static void Main() {  
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );
            using ( var form = new MainForm() ) {
                try {
 
                    Application.Run( form );
                }
                finally {
                    if ( form.Process != null && !form.Process.HasExited) {
                        // Прибиваем процесс
                        form.Process.Kill();
                    }
                }
            }
        }
    }
}
Консольное приложение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
 
using Services;
 
namespace ConsoleApplicationClient {
    class Program {
        static void Main() {
            //*Регистрируем*канал*tcp
            ChannelServices.RegisterChannel( new TcpChannel( 8082 ), false );
 
            //*Регистрируем*сервер*по*адресу*MyRemoteHost/rt
            RemotingConfiguration.RegisterWellKnownServiceType( typeof ( MyService ),
                "MyRemoteHost", WellKnownObjectMode.SingleCall );
 
            // Ожидаем команд
            Console.Read();
        }
    }
 
    internal class MyService : MarshalByRefObject, IService {
        #region IService Members
 
        public byte[] ReadFile( string fileName ) {
            //*Читаем*из*файла*данные
            if ( File.Exists( fileName ) ) {
                using ( MemoryStream memoryStream = new MemoryStream() ) {
                    File.OpenRead( fileName ).CopyTo( memoryStream );
                    Console.WriteLine( fileName );
                    return memoryStream.ToArray();
                }
            }
            return null;
        }
 
        #endregion
    }
}
Библиотека с интерфейсом, должна быть добавлена в референсы обоих проектов:
C#
1
2
3
4
5
6
namespace Services {
    // Интерфейс сервиса
    public interface IService {
        byte[] ReadFile( string fileName );
    }
}
Проект:
ConsoleApplicationClient.zip
1
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723
16.01.2011, 21:20  [ТС]
Цитата Сообщение от ucit Посмотреть сообщение
А в чём именно не смог разобраться что и как работаетт? Поподробнее с этого момента пожалуйста.
я так понимаю что все начинается отсюда:
Сполер

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
                /// <summary>
        /// Starts the core of SharpDevelop.
        /// </summary>
        [STAThread()]
        public static void Main(string[] args)
        {
            #if DEBUG
            if (Debugger.IsAttached) {
                Run(args);
                return;
            }
            #endif
            // Do not use LoggingService here (see comment in Run(string[]))
            try {
                Run(args);
            } catch (Exception ex) {
                try {
                    HandleMainException(ex);
                } catch (Exception loadError) {
                    // HandleMainException can throw error when log4net is not found
                    MessageBox.Show(loadError.ToString(), "Critical error (Logging service defect?)");
                }
            }
        }

потом это:
Сполер

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        static void Run(string[] args)
        {
            // DO NOT USE LoggingService HERE!
            // LoggingService requires ICSharpCode.Core.dll and log4net.dll
            // When a method containing a call to LoggingService is JITted, the
            // libraries are loaded.
            // We want to show the SplashScreen while those libraries are loading, so
            // don't call LoggingService.
            
            #if DEBUG
            Control.CheckForIllegalCrossThreadCalls = true;
            #endif
            commandLineArgs = args;
            bool noLogo = false;
            
            Application.SetCompatibleTextRenderingDefault(false);
            SplashScreenForm.SetCommandLineArgs(args);
            
            foreach (string parameter in SplashScreenForm.GetParameterList()) {
                if ("nologo".Equals(parameter, StringComparison.OrdinalIgnoreCase))
                    noLogo = true;
            }
            
            if (!noLogo) {
                SplashScreenForm.ShowSplashScreen();
            }
            try {
                RunApplication();
            } finally {
                if (SplashScreenForm.SplashScreen != null) {
                    SplashScreenForm.SplashScreen.Dispose();
                }
            }
        }

и вот это:
Сполер

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
        static void RunApplication()
        {
            LoggingService.Info("Starting SharpDevelop...");
            try {
                StartupSettings startup = new StartupSettings();
                #if DEBUG
                startup.UseSharpDevelopErrorHandler = !Debugger.IsAttached;
                #endif
                
                Assembly exe = typeof(SharpDevelopMain).Assembly;
                startup.ApplicationRootPath = Path.Combine(Path.GetDirectoryName(exe.Location), "..");
                startup.AllowUserAddIns = true;
                startup.ConfigDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                                                       "ICSharpCode/SharpDevelop2.1");
                
                startup.AddAddInsFromDirectory(Path.Combine(startup.ApplicationRootPath, "AddIns"));
                
                SharpDevelopHost host = new SharpDevelopHost(AppDomain.CurrentDomain, startup);
                
                string[] fileList = SplashScreenForm.GetRequestedFileList();
                if (fileList.Length > 0) {
                    if (LoadFilesInPreviousInstance(fileList)) {
                        LoggingService.Info("Aborting startup, arguments will be handled by previous instance");
                        return;
                    }
                }
                
                host.BeforeRunWorkbench += delegate {
                    if (SplashScreenForm.SplashScreen != null) {
                        SplashScreenForm.SplashScreen.BeginInvoke(new MethodInvoker(SplashScreenForm.SplashScreen.Dispose));
                        SplashScreenForm.SplashScreen = null;
                    }
                };
                
                WorkbenchSettings workbenchSettings = new WorkbenchSettings();
                workbenchSettings.RunOnNewThread = false;
                workbenchSettings.UseTipOfTheDay = true;
                for (int i = 0; i < fileList.Length; i++) {
                    workbenchSettings.InitialFileList.Add(fileList[i]);
                }
                host.RunWorkbench(workbenchSettings);
            } finally {
                LoggingService.Info("Leaving RunApplication()");
            }
        }

после этой строчки
C#
1
host.RunWorkbench(workbenchSettings);
, я запутался, там вылазиет столько зависимостей, что страшно становится...

Добавлено через 17 минут
к этой строчке, вот такой комментарий:
/// <summary>
/// Initializes the workbench (create the MainForm instance, construct menu from AddInTree etc.)
/// and runs it using the supplied settings.
/// This starts a new message loop for the workbench. By default the message loop
/// is created on a new thread, but you can change the settings so that
/// it is created on the thread calling RunWorkbench.
/// In that case, RunWorkbench will block until SharpDevelop is shut down!
/// </summary>
что тут имели ввиду и что делается дальше, мне не понятно(
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
16.01.2011, 23:55
Sequd, объясните толковым языком что Вам нужно, нифига не понятно.
Цитата Сообщение от Sequd Посмотреть сообщение
что тут имели ввиду и что делается дальше, мне не понятно(
/// <summary>
/// Инициализирует рабочую среду (предположение) (создает экземпляр формы MainForm, создает меню для аддонов и т.д.)
/// и запускает её используя текущие настройки.
/// Тем самым создается новый цикл сообщений для среды. По умолчанию цикл
/// создается в новом потоке, но вы можете изменить этот параметр так,
/// чтобы цикл создавался в потоке, в котором вызывается RunWorkbench.
/// В данном случае RunWorkbench будет блокирован до тех пор пока SharpDevelop не завершится!
/// </summary>
0
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723
17.01.2011, 03:22  [ТС]
Sequd, объясните толковым языком что Вам нужно, нифига не понятно.
первоначально мне было интересно, можно ли сделать программу, которая не будет иметь какое либо визуальное представление! то есть, просто запустил ехе, програма что то сделала, и и все.
хочу что бы было что то типо ядра программы, которая в дальнейшем будет запускать все остальное...
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.01.2011, 03:27
Так dampir Вам это и привёл. Либо делайте как он сказал, либо создайте консольный проект и в свойствах проект измените его тип на Windows Application. И у Вас будет приложение у которого выполнение будет длится только в пределах процедуры Main (образно), при этом ни окно WinForm, ни консоль даже не появятся.

Вся фишка процедуры Main в WinForms - это запуска цикла сообщений, которые обрабатываются самой формой (или частично Вами) дабы ей можно было управлять (принимать сообщения от системы).
1
85 / 84 / 8
Регистрация: 03.11.2009
Сообщений: 723
17.01.2011, 14:19  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Так dampir Вам это и привёл. Либо делайте как он сказал, либо создайте консольный проект и в свойствах проект измените его тип на Windows Application. И у Вас будет приложение у которого выполнение будет длится только в пределах процедуры Main (образно), при этом ни окно WinForm, ни консоль даже не появятся.

Вся фишка процедуры Main в WinForms - это запуска цикла сообщений, которые обрабатываются самой формой (или частично Вами) дабы ей можно было управлять (принимать сообщения от системы).
спасиб за разъяснения... а вот если мне далее необходимо будет запустить форму? создавать новый домен приложения?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.01.2011, 15:11
C#
1
2
3
            using(Form frm = new Form()){ // Нужная форма для запуска
                Application.Run(frm); // Метод Run запускает цикл сообщений для заданной формы в текущем потоке.
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2011, 15:11
Помогаю со студенческими работами здесь

Чтобы перед запуском формы проверялось одно условие, а именно запущено приложение с параметром или без
нужно сделать так, чтобы перед запуском формы проверялось одно условие, а именно запущено приложение с параметром или без. Набросал...

Как установить .NET приложение, но без установки самого .NET Framework?
Мне нужно установить .NET приложение, но без установки самого .NET Framework. Возможно ли это? есть ли способ избежать установки на...

Как создать приложение Windows Forms, сохраняющее данные на компьютере без своей СУБД?
Здравствуйте! Возникла необходимость создать такое приложение winforms, которое будет создавать БД, вносить изменения, сохранять, выводить...

Web приложение без iis сервера
Давненько я видел CRM которая устанавливалась на компьютер и работала через браузер, страницы в браузере были с расширением .aspx.(поэтому...

Как запустить ASP приложение без VS
Привет всем! Создал ASP приложение. Через Visual Studio прекрасно запускается под адресом http://localhost:3228/labseti.Web/TestPage.aspx,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru