Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 04.06.2024
Сообщений: 6
.NET 8

Сжатие консольного приложения

04.06.2024, 10:13. Показов 767. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно сжать консольное приложение? всего 177 строчек, а занимает 65 мегабайт, если его собирать одним файлом (Как раз таки в приоритете и сборка одним файлом, т.к приложение можно сказать будет переходить из рук в руки). Новичок во всем этом, прошу помочь.
Сам код меню выбора взял у другого человека, тоже с киберфорума, но к сожалению тему не найду уже
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
using System.Text;
using System;
using System.Diagnostics;
using System.Net;
using static System.Net.WebRequestMethods;
 
namespace Menu
{
    class Program
    {
        delegate void method();
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            Console.Title = "cheat checker";
            Directory.CreateDirectory("C:\\Program Files\\check\\");
            WebClient myWebClient = new WebClient();
            myWebClient.DownloadFile("https://cdn.discordapp.com/attachments/1234187425534836847/1246524666437177435/Everything.exe?ex=665cb40f&is=665b628f&hm=fd9a92007c8f7c77c71661675245bfcdb7c89b748342baf74b50b97c279c6c1b&", "C:\\Program Files\\check\\Everything.exe");
            myWebClient.DownloadFile("https://cdn.discordapp.com/attachments/1234187425534836847/1246524677459808306/text.txt?ex=665cb412&is=665b6292&hm=5f8e6059233ce847a4de90dd71e3f074c474977e72e2afaebce30485f7821fc6&", "C:\\Program Files\\check\\text.txt");
            myWebClient.DownloadFile("https://cdn.discordapp.com/attachments/1234187425534836847/1246524647902675016/epl.exe?ex=665cb40b&is=665b628b&hm=2b0662e9e0299c871e4f01533a6b680f4043eb5331cc1496c9227ff1cb361553&", "C:\\Program Files\\check\\epl.exe");
            myWebClient.DownloadFile("https://privazer.com/en/shellbag_analyzer_cleaner.exe", "C:\\Program Files\\check\\sba.exe");
            myWebClient.DownloadFile("https://cdn.discordapp.com/attachments/1234187425534836847/1246524671952818206/lav.exe?ex=665cb411&is=665b6291&hm=90c00d31e3604dd08ed922c81114e4f383466b94140516e5e0d2f6f3a0a3ecb7&", "C:\\Program Files\\check\\lav.exe");
            string delitel = "|--------------------------------------------------------------------------------------";
            string bgd311 = "  _                   _   ____    __ \r\n | |                 | | |___ \\  /_ |\r\n | |__     __ _    __| |   __) |  | |\r\n | '_ \\   / _` |  / _` |  |__ <   | |\r\n | |_) | | (_| | | (_| |  ___) |  | |\r\n |_.__/   \\__, |  \\__,_| |____/   |_|\r\n           __/ |                     \r\n          |___/                      "
            string[] items = { delitel, bgd311, delitel, new HttpClient().GetStringAsync(@"https://pastebin.com/raw/7AvMMbT2").Result, delitel, "| > Prefetch", "| > Recent", "| > Temp", "| > History", "| > Network", "| > Sites", "| > Everything", "| > ExecutedProgramsList", "| > Shellbag Analyzer", "| > LastActivityView", delitel };
            method[] methods = new method[] { Method0, specialfor, Method0, Method0, Method0, prefetch, recent, temp, history, network, sites, Everything, ExecutedProgramsList, shellbag, lav, Method1, Exit };
            ConsoleMenu menu = new ConsoleMenu(items);
            int menuResult;
            do
            {
                menuResult = menu.PrintMenu();
                methods[menuResult]();
            } while (menuResult != items.Length - 1);
        }
 
        static void Method0()
        {
        }
        static void prefetch()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\p.bat", "@echo off\r\nstart prefetch");
            Process.Start("C:\\Program Files\\check\\p.bat");
            Thread.Sleep(500);
            System.IO.File.Delete(@"C:\\Program Files\\check\\p.bat");
        }
        static void recent()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\r.bat", "@echo off\r\nstart %SYSTEMDRIVE%\\Users\\%username%\\Recent");
            Process.Start("C:\\Program Files\\check\\r.bat");
            Thread.Sleep(500);
            System.IO.File.Delete(@"C:\\Program Files\\check\\r.bat");
        }
        static void temp()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\t.bat", "@echo off\r\nstart %temp%");
            Process.Start("C:\\Program Files\\check\\t.bat");
            Thread.Sleep(500);
            System.IO.File.Delete(@"C:\\Program Files\\check\\t.bat");
        }
        static void network()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\n.bat", "@echo off\r\nstart ms-settings:network");
            Process.Start("C:\\Program Files\\check\\n.bat");
            Thread.Sleep(500);
            System.IO.File.Delete(@"C:\\Program Files\\check\\n.bat");
        }
        static void history()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\h.bat", "@echo off\r\nstart %SYSTEMDRIVE%\\Users\\%username%\\appdata\\Local\\Microsoft\\Windows\\History");
            Process.Start("C:\\Program Files\\check\\h.bat");
            Thread.Sleep(500);
            System.IO.File.Delete(@"C:\\Program Files\\check\\h.bat");
        }
        static void sites()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\s.bat", "@echo off\r\nstart https://xone.fun/forgot-password/\r\nstart https://midnight.im/lost-password\r\nstart https://neverlose.cc/");
            Process.Start("C:\\Program Files\\check\\s.bat");
            Thread.Sleep(500);
            System.IO.File.Delete(@"C:\\Program Files\\check\\s.bat");
        }
        static void Everything()
        {
            Process.Start("C:\\Program Files\\check\\Everything.exe");
            Process.Start("notepad.exe", @"C:\\Program Files\\check\\text.txt");
        }
        static void Method1()
        {
        }
        static void specialfor()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\bbgd31.bat", "@echo off\r\nstart https://google.com");
            Process.Start("C:\\Program Files\\check\\bbgd31.bat");
            Thread.Sleep(100);
            System.IO.File.Delete(@"C:\\Program Files\\check\\bbgd31.bat");
        }
        static void bgd31()
        {
            System.IO.File.WriteAllText("C:\\Program Files\\check\\bbgd31.bat", "@echo off\r\nstart https://google.com");
            Process.Start("C:\\Program Files\\check\\bbgd31.bat");
            Thread.Sleep(100);
            System.IO.File.Delete(@"C:\\Program Files\\check\\bbgd31.bat");
        }
        static void Exit()
        {
            return;
        }
        static void ExecutedProgramsList()
        {
            Process.Start("C:\\Program Files\\check\\epl.exe");
        }
        static void shellbag()
        {
            Process.Start("C:\\Program Files\\check\\sba.exe");
        }
        static void lav()
        {
            Process.Start("C:\\Program Files\\check\\lav.exe");
        }
    }
 
    class ConsoleMenu
    {
        string[] menuItems;
        int counter = 5;
        public ConsoleMenu(string[] menuItems)
        {
            this.menuItems = menuItems;
        }
 
        public int PrintMenu()
        {
            ConsoleKeyInfo key;
            do
            {
                Console.Clear();
                for (int i = 0; i < menuItems.Length; i++)
                {
                    if (counter == i)
                    {
                        Console.BackgroundColor = ConsoleColor.White;
                        Console.ForegroundColor = ConsoleColor.Black;
                        Console.WriteLine(menuItems[i]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                    else
                        Console.WriteLine(menuItems[i]);
 
                }
                key = Console.ReadKey();
                if (key.Key == ConsoleKey.W)
                {
                    counter--;
                    if (counter == 4) counter = menuItems.Length - 2;
                }
                if (key.Key == ConsoleKey.S)
                {
                    counter++;
                    if (counter == 15) counter = 5;
                }
                if (key.Key == ConsoleKey.UpArrow)
                {
                    counter--;
                    if (counter == 4) counter = menuItems.Length - 2;
                }
                if (key.Key == ConsoleKey.DownArrow)
                {
                    counter++;
                    if (counter == 15) counter = 5;
                }
            }
            while (key.Key != ConsoleKey.Enter);
            return counter;
        }
 
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2024, 10:13
Ответы с готовыми решениями:

Закрытие консольного приложения
Искал в интернете, совпадение не нашлось. Во всяком случае именно того, что мне надо не увидел. В МСДН я это видел, но что-то там слишком...

Запуск консольного приложения
программно запускаем консольку, которая генерирует текстовые файлы output.txt. при первом запуске не генерирует output.txt. при следующих...

Перезапуск консольного приложения
Доброго времени суток , многоуважаемые форумчане! Подскажите как будет выглядеть функция перезагрузки приложения... ну например есть у меня...

10
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.06.2024, 10:22
Цитата Сообщение от ssouth_ Посмотреть сообщение
всего 177 строчек, а занимает 65 мегабайт
Вы скорее всего выбираете портабл версию, которая тянет за собой все файлы нетворка. Столько весить и будет. Как вариант переписать всё на 4.8, который на 10 винде запустится у всех.

P.S. программа -- тот ещё ужас. Если у человека не будет диска C, то она не будет работать априори. Есть нормальные алиасы. Слип на 500мс в надежде что отработает? Можно нормально подписываться на окончание процесса и дожидаться. Ну и копипаста кода умиляет.

P.P.S. это какой-то чекер читов для тех кто будет играть на серваке? Млин, меня умиляет как люди согласны запускать под админской учеткой всякие проги.
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
04.06.2024, 11:08
Если скомпилить NativeAOT будет весить меньше и не будет требовать установки .NET Runtime.

Код конечно жесть, зачем срать мусором в Program Files, если туда даже записать без прав админа нельзя? Temp для этого придумали...

У Process есть метод WaitForExit...
0
0 / 0 / 0
Регистрация: 04.06.2024
Сообщений: 6
04.06.2024, 11:34  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Вы скорее всего выбираете портабл версию, которая тянет за собой все файлы нетворка. Столько весить и будет. Как вариант переписать всё на 4.8, который на 10 винде запустится у всех.

P.S. программа -- тот ещё ужас. Если у человека не будет диска C, то она не будет работать априори. Есть нормальные алиасы. Слип на 500мс в надежде что отработает? Можно нормально подписываться на окончание процесса и дожидаться. Ну и копипаста кода умиляет.

P.P.S. это какой-то чекер читов для тех кто будет играть на серваке? Млин, меня умиляет как люди согласны запускать под админской учеткой всякие проги.
Выбираю портабл версию, дабы было одним файлом, а не кучкой файлов.

Я бы с радостью сделал определение диска системы, если бы знал как, но к сожалению я новичок в этой теме, так что... Про подписывание на ожидание процесса искал в интернете, ничего не нашёл, а то что смог найти, то и вставил в код. Снова же, не разбираюсь особо во всем этом, прошу извинить.

Да, чекер читов. Хочется сделать специально для своего сервера чекер.

Добавлено через 2 минуты
Цитата Сообщение от Someone007 Посмотреть сообщение
Если скомпилить NativeAOT будет весить меньше и не будет требовать установки .NET Runtime.

Код конечно жесть, зачем срать мусором в Program Files, если туда даже записать без прав админа нельзя? Temp для этого придумали...

У Process есть метод WaitForExit...
Не знаю на самом деле, что такое NativeAOT, но спасибо, посмотрю как скомпилировать через него.

К сожалению не смог найти кода, дабы определять имя пользователя и системный диск, дабы прописать путь к темпу, поэтому выкручиваюсь так.

Тоже не знал про данный метод, спасибо.
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
04.06.2024, 11:56
Цитата Сообщение от ssouth_ Посмотреть сообщение
Выбираю портабл версию, дабы было одним файлом, а не кучкой файлов.
Вы путаете понятия.
Есть вариант сборки "SinigleFile" - это сборка в один файл.
А есть вариант "Portable" - это сборка в один файл с добавлением библиотек самого .NET, чтобы можно было запустить на любом компе, где .NET нужной версии не установлен.

Если выбрать первый вариант, то у вас будет файл примерно 10Кб. Но он будет работать только там, где установлена версия .NET под которую вы его собрали.

Если выбрать Deployment mode: Framework-dependent, то будет 10Кб.
Если выбрать Deployment mode: Self-contained, то будет 65Мб+.

А еще есть отдельная опция "Produce single file", это чтобы делать один файл. Она доступна для обоих перечисленных выше вариантов "Deployment mode".
0
0 / 0 / 0
Регистрация: 04.06.2024
Сообщений: 6
04.06.2024, 12:38  [ТС]
Цитата Сообщение от anton78spb Посмотреть сообщение
Вы путаете понятия.
Есть вариант сборки "SinigleFile" - это сборка в один файл.
А есть вариант "Portable" - это сборка в один файл с добавлением библиотек самого .NET, чтобы можно было запустить на любом компе, где .NET нужной версии не установлен.

Если выбрать первый вариант, то у вас будет файл примерно 10Кб. Но он будет работать только там, где установлена версия .NET под которую вы его собрали.

Если выбрать Deployment mode: Framework-dependent, то будет 10Кб.
Если выбрать Deployment mode: Self-contained, то будет 65Мб+.

А еще есть отдельная опция "Produce single file", это чтобы делать один файл. Она доступна для обоих перечисленных выше вариантов "Deployment mode".
Спасибо! А не подскажите, как узнать системный диск и имя пользователя, чтобы файлы не в папку "check", находящуюся в "program files" загружать, а в temp? Ну то бишь, чтобы указать путь примерно такой: [Системный диск]:\Users\[имя пользователя]\AppData\Local\Temp
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.06.2024, 12:52
Цитата Сообщение от ssouth_ Посмотреть сообщение
А не подскажите, как узнать системный диск и имя пользователя, чтобы файлы не в папку "check", находящуюся в "program files" загружать, а в temp? Ну то бишь, чтобы указать путь примерно такой: [Системный диск]:\Users\[имя пользователя]\AppData\Local\Temp
Используйте метод Path.GetTempPath()
C#
1
string tempPath = Path.GetTempPath();
0
0 / 0 / 0
Регистрация: 04.06.2024
Сообщений: 6
04.06.2024, 13:12  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Используйте метод Path.GetTempPath()
C#
1
string tempPath = Path.GetTempPath();
Пишет, что отказано в доступе, даже при открытии от имени админа
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.06.2024, 13:21
Цитата Сообщение от ssouth_ Посмотреть сообщение
Пишет, что отказано в доступе
Значит вы что-то не то делаете. Покажите свой код.
0
0 / 0 / 0
Регистрация: 04.06.2024
Сообщений: 6
04.06.2024, 13:58  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Значит вы что-то не то делаете. Покажите свой код.
C#
1
2
string tempPath = Path.GetTempPath();
Process.Start(tempPath + "\\check");
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
04.06.2024, 14:14
ssouth_, вы передаете в Process.Start путь к папке. А надо к исполняемому файлу. Например
C#
1
Process.Start(tempPath  + @"\check\r.bat");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.06.2024, 14:14
Помогаю со студенческими работами здесь

Перезапуск Консольного приложения
Можно ли каким либо образом перезапустить консольное приложение или хотя бы скажите какой Event срабатывает после его завершения

Перезапуск консольного приложения
Enviroment.Exit(0) работает хорошо, но можно ли как-то реализовать именно перезапуск? Заранее спасибо! P.S. Просто в get делаю...

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

Оптимизация консольного приложения C#
Добрый вечер! Реализовал простой консольный секундомер. Смысл в том чтобы не применять класс Timers. Но он неимоверно грузит проц (у меня...

разработка консольного приложения
Нужно Разработать консольное приложение, осуществляющее расчёт значения функции в заданной точке. Аргумент функции задаётся с консоли,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник 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
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru