Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# .NET

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Qfeed
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
#1

Запуск программы только из другой программы - C#

29.08.2013, 21:17. Просмотров 2048. Ответов 21
Метки нет (Все метки)

Здравствуйте уважаемые программисты, сегодня столкнулся с проблемой, естественно первым делом прогуглил и нечего толкового не нашёл. Вообщем написал я загрузчик на WPF, и написал софтинку на winForms, нужно реализовать так чтобы программу на WinForms можно было запустить только из загрузчика и никак по другому, возможно ли это сделать ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 21:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запуск программы только из другой программы (C#):

Запуск сторонней программы из программы - C#
Приветствую! Нужна ваша помощь. Есть две программы, одна собирает всю информацию о PC и пишет ее в файл, далее генерирует Private &...

Запуск программы - C#
У меня есть готовая программа, например, текстовый редактор, который сохраняет файлы в "СВОЁМ" формате (т.е. в формате, который не...

запуск внешней программы - C#
Все же никак не получается запустить exe-шник, когда программа висит в трее (например в какое-то время по таймеру)! Как сделать правильно...

Запуск приложений из программы на С# - C#
Доброго времени суток. Мне нужно запустить приложение из моей программы, я его запускаю с помощью Process.Start("3//2//Prlogic.exe"), но...

Запуск программы из Stream - C#
Есть ли возможность запуска программы бинарник которой находится в потоке FileStream без сохранения сразу из оперативки хотя-бы в виде...

Удаленный запуск программы - C#
Необходимо удаленно запустить программу. Делаю так: sLogin = txtbUser.Text; sPassword = txtbPassword.Text; sComputer =...

21
makedonsky94
44 / 44 / 1
Регистрация: 14.02.2013
Сообщений: 139
29.08.2013, 21:23 #2
первое, что приходит в голову - слепить все в 1 проект и скомпилировать)
0
Qfeed
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
29.08.2013, 23:46  [ТС] #3
Цитата Сообщение от makedonsky94 Посмотреть сообщение
первое, что приходит в голову - слепить все в 1 проект и скомпилировать)
К сожалению это не подходит, так как загрузчик будет качать программу с сервера, и нельзя что бы ее кто-то смог запустить из вне загрузчика.

Добавлено через 2 часа 7 минут
Готов неплохо заплатить за помощь...
0
makedonsky94
44 / 44 / 1
Регистрация: 14.02.2013
Сообщений: 139
29.08.2013, 23:51 #4
попробуй покопать в сторону динамической компиляции - качаешь строку с кодом и компилируешь
1
NickoTin
Почетный модератор
Эксперт .NET
8434 / 3556 / 240
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
29.08.2013, 23:58 #5
Цитата Сообщение от Qfeed Посмотреть сообщение
нельзя что бы ее кто-то смог запустить из вне загрузчика
ну чтобы прям никто не смог достаточно сложная задача, но если примитивно и незаметно для обычного пользователя, то можно создавать глобальный именованный мьютекс в WPF приложении и проверять его существование в WinForms, существует - ок, нет - завершаем выполнение.

Псевдокод:
C#
1
2
3
4
5
6
7
8
9
10
11
        private static Mutex mInstanceWPF;
        // Приложение WPF
        static void Run ( )
        {
            bool createdNew;
            mInstanceWPF = new Mutex( false, "AA848796-7EF0-45C8-BCA4-7BC26FD01571", out createdNew );
            if ( createdNew )
                Process.Start("...");
            else
                ; // что-то не то, Mutex уже существует
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private static Mutex mInstanceWF;
        // Приложение WinForms
        private static void Main ( string[] args )
        {
            bool createdNew;
            mInstanceWF = new Mutex( true, "AA848796-7EF0-45C8-BCA4-7BC26FD01571", out createdNew );
 
            // Создан новый Mutex, значит запущено не из WPF приложения
            if ( createdNew )
                return;
 
            // ok
            // run form
            // ...
        }
Имя мьютекса случайно сгенерировано...
1
Psilon
Master of Orion
Эксперт .NET
5935 / 4834 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
30.08.2013, 01:56 #6
Qfeed, пишешь для своей проги расширение .единаяРоссия и все
0
Qfeed
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
30.08.2013, 02:52  [ТС] #7
NickoTin, А что если файл wf будет зашифрован, а уже в wpf расшифровывать и запускать ? Но если я не ошибаюсь, то можно сдампить. Нужно что бы вообще было не возможно запустить софт без загрузчика...
0
NickoTin
Почетный модератор
Эксперт .NET
8434 / 3556 / 240
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
30.08.2013, 03:08 #8
Цитата Сообщение от Qfeed Посмотреть сообщение
можно сдампить
Можно.
Цитата Сообщение от Qfeed Посмотреть сообщение
Нужно что бы вообще было не возможно
Невозможное возможно, и это постоянно доказывается, нужно лишь время...
На форуме уже десятки раз обсуждались техники защиты приложений и их обхода, поищите.
Один из изощренных вариантов: напишите драйвер-фильтр файловой системы, который будет скрывать нужный софт
http://habrahabr.ru/post/176739/
http://habrahabr.ru/post/138796/
0
natrox
12 / 16 / 1
Регистрация: 13.04.2011
Сообщений: 148
30.08.2013, 05:28 #9
а разве при запуске одного процесса из другого, запускающий процесс не будет считаться для запускаемого родительским? запускающийся процесс вроде все от запускаемого наследует, разве нельзя отловить handle родительского процесса? я как-то сталкивался с тем что права доступа наследуются процессу запускаемому из wf приложения. хотя может что путаю.
0
Qfeed
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
30.08.2013, 06:38  [ТС] #10
Цитата Сообщение от NickoTin Посмотреть сообщение
Можно.

Невозможное возможно, и это постоянно доказывается, нужно лишь время...
На форуме уже десятки раз обсуждались техники защиты приложений и их обхода, поищите.
Один из изощренных вариантов: напишите драйвер-фильтр файловой системы, который будет скрывать нужный софт
http://habrahabr.ru/post/176739/
http://habrahabr.ru/post/138796/
Та мне бы хоть от школохакеров защититься.
0
Psilon
Master of Orion
Эксперт .NET
5935 / 4834 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
30.08.2013, 09:26 #11
Qfeed, тогда я уже сказал как
0
Qfeed
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
30.08.2013, 10:58  [ТС] #12
Вот нашёл в инете такую функцию дешифрования, но тут она сохраняет сам файл, как мне его запустить прямо из памяти не сохраняя ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            byte[] buff = null;
            using (var sa = algo)
            using (var fsr = File.Open(fileIn, FileMode.Open, FileAccess.Read))
            using (var cs = new CryptoStream(fsr,
                sa.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Read)
                )
            {
                buff = new byte[fsr.Length];
                cs.Read(buff, 0, buff.Length);
                using (var fsw = File.Open("Application.exe", FileMode.Create, FileAccess.Write))
                {
                    int len = (int)BitConverter.ToInt64(buff, 0);
                    fsw.Write(buff, sizeof(long), len);
                    fsw.Flush();
                }
            }
0
NickoTin
Почетный модератор
Эксперт .NET
8434 / 3556 / 240
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
30.08.2013, 11:23 #13
Добавляете WinForm приложение в ресурсы к WPF приложению и запускаете так:
C#
1
2
3
4
5
6
7
        private void ButtonBase_OnClick ( object sender, RoutedEventArgs e )
        {
            var thread = new Thread( 
                ( ) => Assembly.Load( Properties.Resources.WindowsFormsApplication1 )
                               .EntryPoint.Invoke( null, new object[] { new string[0] /* Если у функции Main нет параметров, то null вместо string[0] */ } ));
            thread.Start();
        }
Можно добавить проверку как посоветовал natrox, описывал здесь: Узнать родительский процесс, ну и как Psilon посоветовал, но это совсем просто
1
Qfeed
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
30.08.2013, 11:31  [ТС] #14
Цитата Сообщение от NickoTin Посмотреть сообщение
Добавляете WinForm приложение в ресурсы к WPF приложению и запускаете так:
C#
1
2
3
4
5
6
7
        private void ButtonBase_OnClick ( object sender, RoutedEventArgs e )
        {
            var thread = new Thread( 
                ( ) => Assembly.Load( Properties.Resources.WindowsFormsApplication1 )
                               .EntryPoint.Invoke( null, new object[] { new string[0] /* Если у функции Main нет параметров, то null вместо string[0] */ } ));
            thread.Start();
        }
Можно добавить проверку как посоветовал natrox, описывал здесь: Узнать родительский процесс, ну и как Psilon посоветовал, но это совсем просто
Думаю это совсем не вариант, так как лаунчер скачивает приложение wf из сервера, после его запускает.
0
NickoTin
Почетный модератор
Эксперт .NET
8434 / 3556 / 240
Регистрация: 14.06.2010
Сообщений: 4,512
Записей в блоге: 9
30.08.2013, 11:32 #15
Qfeed, да какая разница? Properties.Resources.WindowsFormsApplication1 это массив байт, замените на принятый от сервера массив, всё.
0
30.08.2013, 11:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 11:32
Привет! Вот еще темы с ответами:

Запуск файла из программы - C#
Никак не могу найти функцию. Программа является ланчером для другой программы, так вот как из моей программы запустить другую программу, и...

Запуск программы из памяти - C#
Всем привет. Недавно перешел с vb net на c# из-за отсутствия перспективы исполнять файл без выкидывания программы на диск и с толкнулся с...

Запретить запуск программы - C#
а как запретить запуск программы даже первый раз? т.е. чтоб программа вобще не запускадась Не нужно задавать свои вопросы в чужих темах

Запуск программы с правами администратора - C#
Подскажите пожалуйста как выполнить это с правами админа так как просто не отображается с другими, и еще вопрос после выполнения как...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru