С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
1

Запуск приложения только с лаунчера

21.04.2011, 13:26. Просмотров 3578. Ответов 14
Метки нет (Все метки)

Есть два файла EXE.Приложение и лаунчер.Скажите что можно сделать, чтобы приложение запускалось только с лаунчера, то есть при клике на самом приложении оно не запускалось.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 13:26
Ответы с готовыми решениями:

Запуск только одного экземпляра приложения
Вобщем есть вот такой вот код using System.Threading; using...

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

Запуск приложения
подскажите, как программно запустить, отслеживать, а при необходимости...

Создание Лаунчера
Доброго времени суток! Помогите пожалуйста! Создал в Form1 кнопку (button) и...

Запуск другого приложения
Здравствуйте! Подскажите, как организовать такое: нужно написать приложение,...

14
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
21.04.2011, 13:32 2
предлагаю такой вариант:
1) в лаунчере делаешь запуск приложения с параметрами
2) в самом приложении делаешь проверку на переданные параметры - если они неверны, выводим сообщение об ошибке и закрываем прогу

какой-нибудь особо прошаренный юзер конечно сможет сделать что-нить нехорошее и узнать, что и как ты делаешь и запустить твою прогу с этими же параметрами, но, думаю, у тебя там не база данных цру и так делать никто не будет
1
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
21.04.2011, 13:53  [ТС] 3
znake, можешь привести пример как считывать параметры?
0
m0nax
1203 / 908 / 109
Регистрация: 12.01.2010
Сообщений: 1,891
Завершенные тесты: 3
21.04.2011, 14:08 4
какой-нибудь особо прошаренный юзер конечно сможет сделать что-нить нехорошее и узнать, что и как ты делаешь и запустить твою прогу с этими же параметрами, но, думаю, у тебя там не база данных цру и так делать никто не будет
От прошареных тоже можно защититься
Передавать например хеш текущей даты с точностью до минуты, прога тоже возьмет хеш и сравнит

lancer2404,
C#
1
2
void Main(string[] args)  //  <<< args это массив параметров
{
1
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
21.04.2011, 14:13 5
для винформс приложения:

1)
файл Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplication5
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(args));
        }
    }
}


2)
файл главной формы
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        string[] arg;
        public Form1(string [] args)
        {
            InitializeComponent();
            arg = args;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            if (arg.Length == 0) 
                { 
                    MessageBox.Show("no arguments"); 
                    this.Close(); 
                }
            else if (arg[0] == "-h") MessageBox.Show("good arguments, let's rock!");
                 else
                    {
                        MessageBox.Show("bad arguments"); 
                        this.Close(); 
                    }
        }
    }
}


запуск и передачу параметров лаунчером делай через Process.Start()

в качестве пояснения - скомпилишь и попробуй запустить скомпиленное приложение через консольку... допустим выходной файл называется app:
1) app - выдаст мессадж "no arguments" и закроется прога
2) app -b - выдаст мессадж "bad arguments" и закроется прога
3) app -h - выдаст мессадж "good arguments, let's rock" и откроется главная форма


думаю, дальше разберешься
3
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
26.04.2011, 16:20  [ТС] 6
А еще есть какой нибудь способ запуска? (Исходники утеряны)
0
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
26.04.2011, 16:25 7
Цитата Сообщение от lancer2404 Посмотреть сообщение
(Исходники утеряны)
и? напиши заново...
0
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
26.04.2011, 16:26  [ТС] 8
Там большое приложение.времени нет.
0
znake
26.04.2011, 16:32
  #9

Не по теме:

то ли лыжи не едут...(с)
либо ты чего-то не понимаешь, либо я! какой бы там ни был проект и т.п. - сделать запуск с лаунчера с моим примером перед глазами - дело 20 минут (и от самого приложения не зависит никак!)...чуть ли не слово в слово скопировать...а сам лаунчер - консольное приложение в одну строку: Process.Start...

0
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
26.04.2011, 16:33  [ТС] 10
znake, да у тебя отличный пример мне пригодился, но есть приложение в которое я не могу засунуть проверку аргументов.
0
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
26.04.2011, 16:39 11
тогда либо жди мудрого волшебника Гудвина, который шарит, как сделать иначе, либо выкладывай Program.cs и загрузку той формы, которая первая грузится (это же не секретная информация?) и давай вместе подумаем, как можно обойти то, что ты не можешь туда засунуть проверку аргументов...
0
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
26.04.2011, 17:51  [ТС] 12
Ты наверно не понял. У меня есть приложение(без исходников) скомпилированное, вот что можно с ним сделать чтобы оно не запускалось обычным способом. Я знаю что есть всякие протекторы, но они интегрируются в него. Может ты знаешь протекторы какие или типо того?
0
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
26.04.2011, 17:55 13
а, так вот о чем речь...нет, тогда у меня нет вариантов кроме параноидальных:
1) приложение засовывается в архив
2) архив запароливается как-нибудь
3) пишется лаунчер, который каждый раз будет раскрывать архив и запускать оттуда прогу

и в качестве изюминки на вершину этой паранойи: в лаунчере вбит какой-нить жосткий алгоритм генерации ключей и каждый раз генерится новый ключ на архив
2
body90
366 / 299 / 18
Регистрация: 26.05.2009
Сообщений: 2,676
26.04.2011, 18:09 14
Так, берется чужой exe, читается как обычный файл, шифруется любым способом и записывается в файл. Потом, когда надо, ланчер читает этот файл в массив байт, расшифровует и запускает прям из памяти. Это же не так сложно.
0
lancer2404
903 / 12 / 1
Регистрация: 02.10.2010
Сообщений: 136
26.04.2011, 20:23  [ТС] 15
body90, для меня сложно. никогда таким не занимался. Пожалуйста если можно ссылку или пример.Премного благодарен

Добавлено через 2 часа 12 минут
Нашел вот это.Написано нужно создат свою точку входа.Не могу разобраться что куда
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
class StartUpApplication
{
    public static void Main()
    {
        var frm = new frmMain();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            //определяем путь к файлу на диске
            //каким образом выбираете, не имеет значения. Можно передать и в командной строке
            string pathToFile = frm.lstMain.SelectedItem.ToString();
            //создаем поток для чтения
            var fs = new FileStream(pathToFile, FileMode.Open);
            //создаем побитовую читалку
            var br = new BinaryReader(fs);
            //bin содержит побайтово весь exe-файл
            byte[] bin = br.ReadBytes((int)(fs.Length));
            //закрываем поток
            fs.Close();
            //закрываем читалку
            br.Close();
 
            //загружаем байты в сборку
            Assembly a = Assembly.Load(bin);
            //ищем точку входа в приложение
            MethodInfo method = a.EntryPoint;
            //если найдена точка входа
            if (method != null)
            {
                //создаем экземпляр главной формы
                object o = a.CreateInstance(method.Name);
                //запускаем приложение через точку входа
                method.Invoke(o, null);
            }
        }
    }
}
0
26.04.2011, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2011, 20:23

Запуск приложения из сервиса
Добрый день. Создал свой первый сервис, пытаюсь вызвать из него приложение....

Запуск другого приложения
Привет. А подскажите пожалуйста как по нажатию кнопки в Form1 запускать...

Запуск стороннего приложения
Вот такой вопрос, какой нужен код для запуска стороннего приложения (chm, exe и...


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

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

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