Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Запуск файлов в .NET


Автор: SeventhSon 11.8.2009, 12:56
В процессу написания программы столкнулся с проблемой запуска файлов (тем для Google Chrome), они хранятся в файлах *.crx . При двойном щелчке меняется тема. Как реализовать этот "двойной щелчок" в C# ?

Автор: Ockonal 11.8.2009, 13:18
Создайте новый процесс в системе, используя этот файл. Как делается уже и не помню. ВинАпи, наверное, нужно будет использовать.

Автор: diadiavova 11.8.2009, 13:23
Цитата(SeventhSon @  11.8.2009,  13:56 Найти цитируемый пост)
Как реализовать этот "двойной щелчок" в C# ? 

Код

Process.Start(@"имя файла");

Автор: Bogdan1024 11.8.2009, 17:03
Цитата(diadiavova @ 11.8.2009,  12:23)
Цитата(SeventhSon @  11.8.2009,  13:56 Найти цитируемый пост)
Как реализовать этот "двойной щелчок" в C# ? 

Код

Process.Start(@"имя файла");

Неее, ему не это надо.

Нужно зарегистрировать обработчик для файлов с нужным тебе расширением. Но шо-то как это делается я не помню. Может быть в инсталере можно настроить?

Автор: Alekz 12.8.2009, 09:55
Цитата

Нужно зарегистрировать обработчик для файлов с нужным тебе расширением


Сервис->Свойства Папки-> типы файлов


Process.Start(@"имя файла") - полностью то же самое, что и двойной клик: запуск процеса или открытие файла в связанном с ним приложении.

При желании можно использовать перегрузку Process.Start(ProcessStartInfo). Тут указывается и приложение, и аргументы командной строки и еще куча всего.
Так например можно открыть документ в любом приложении, а не только в том, которое с ним ассоциировано.

Автор: SeventhSon 12.8.2009, 20:51
Нажимаю на кнопку:
Код

            openFileDialog1.ShowDialog();

            string fileAdres = openFileDialog1.FileName;

            Process p = Process.Start(@"E:\Others\Themes For Chrome-Dev\{0}", fileAdres);


Делаю вот так. Вылазит Какое-то исключение.

Правильно ли?

Автор: diadiavova 12.8.2009, 21:04
Цитата(SeventhSon @  12.8.2009,  21:51 Найти цитируемый пост)
Правильно ли? 

Нет

Код

           if( openFileDialog1.ShowDialog() == DialogResult.OK)
           {
           Process.Start(openFileDialog1.FileName);
           }

При условии, что будет выбран файл, который надо "два раза щёлкнуть" smile 

Автор: Genrih1 12.8.2009, 21:07
к сожалению не могу попробовать в студии сейчас, но:
1) в Process.Start(String, String) как говорит мсдн, нужно первым задавать имя программы (это я допускаю, что вы через диалог открываете программу, которой потом хотите открыть файл {0})
2) раз у вас файл *.crx, можно допустить, что вы хотите форматированием в путь впихнуть имя файла1. это вообще неверно, потому что
а) Process.Start(String, String) не форматирует строку
б) имя файла через диалог уже и так возвращается полное имя, с путем
3) если придраться, то исключение может вылезти, если не проверять как вызвался диалог (здесь до этого не дойдет...)
4) если вылазит исключение, значит точно неправильно. поверьте, оно вылазит не для того, чтобы вам испортить нервы. там очень много полезной инфы, почитать которую много скорее, нежели постить на форум и ждать ответа
5) Address - два s (да, я придираюсь)

Автор: SeventhSon 13.8.2009, 20:25
diadiavova, еще одно спасибо! Будет достаточно сообщений - плюсану Вам!


Genrih1, и Вам спасибо! Как новичок на Ваши придирки не обижаюсь smile

Автор: SeventhSon 15.8.2009, 13:28
А как настроить адрес файла: текущая папка(где экзешник)?

Автор: diadiavova 15.8.2009, 13:38
Цитата(SeventhSon @  15.8.2009,  14:28 Найти цитируемый пост)
А как настроить адрес файла: текущая папка(где экзешник)? 

Для начала попробуй вызвать его по относительному имени. Не получится смотри класс System.Wimndows.Forms.Applicanion там можно получить текущий каталог. Или, если это не WinForm-приложение - класс System.Environment.

Автор: SeventhSon 23.8.2009, 11:16
Код

        // Нажатие на кнопку применения темы.
        private void button1_Click(object sender, EventArgs e)
        {
            if (radioButtonGrass.Checked == true)
            {
                Process.Start("@.../grass.crx");
            }                    
        }


Исправьте, что тут не так.

Автор: diadiavova 23.8.2009, 11:33
Цитата(SeventhSon @  23.8.2009,  12:16 Найти цитируемый пост)
Исправьте, что тут не так. 

А зачем собачка внутри кавычек?

Цитата(SeventhSon @  23.8.2009,  12:16 Найти цитируемый пост)
               Process.Start("@.../grass.crx");

Код

               Process.Start(@".../grass.crx");

Автор: SeventhSon 23.8.2009, 11:55
Исправил. Не удается найти файл. Файл кинул в папку с экзешником (Debug).

Добавлено через 5 минут и 14 секунд
Все работает, только когда прописываю полный адрес, а мне этого не надо - не один я буду пользоваться.

Автор: diadiavova 23.8.2009, 12:01
Файл надо кинуть в папку проекта. А в свойствах этого элемента надо поставить "Копировать если новее". Открываешь "обозреватель решений", выделяешь файл, и открываешь окно свойств. Там найдёшь. Тогда при построении он будет копироваться при необходимости в папку с программой.

Автор: SeventhSon 23.8.2009, 12:07
Все получилось:
Код

Process.Start(@"/Grass.crx");

Прокатывает!

Автор: SeventhSon 23.8.2009, 12:35
Вот, что еще хочу реализовать:

Пользователь запускает программу. В ней радиоКнопки, кнопка запуска, и имэйджБокс, в котором при выборе одной из радиокнопок(не нажимая на кнопку "принять") появляется маленький эскиз.
Код

    {        
        public Form1()
        {
            InitializeComponent();                      
        }
        
        private void Images()
        {
            if (radioButtonGrass.Checked == true)
            {
                pictureBox.Image = Google_Chrome_Agent.Properties.Resources.thumb_grass_sm;
            }
            if (radioButtonGlow.Checked == true)
            {
                pictureBox.Image = Google_Chrome_Agent.Properties.Resources.thumb_glow_sm;
            }
        }
        

        // Нажатие на кнопку применения темы.



Запускаю программу, меняю радиокнопки, но ничего не происходит. 

Автор: diadiavova 23.8.2009, 12:39
Создай для всех радиобаттонов общий обработчик кликов и метоб Images вызывай из него.

Добавлено через 12 минут и 8 секунд
А ещё лучше обрабатывать не клики, а CheckedChanged

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)