Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
1

Ошибка при запуске приложения в случае автозапуска при старте Windows

18.01.2017, 20:56. Просмотров 856. Ответов 2
Метки нет (Все метки)


Мне нужно иметь два способа запуска моей программы: обычный запуск с отображением формы, и скрытый запуск без отображения формы - при запуске винды. В обоих случаях создаётся иконка в трее.
Сделал так: если количество параметров, передаваемых при запуске более нуля, значит запускаем скрытно. Работает как надо. Далее я сделал так, чтобы прога автоматом запускалась при старте винды, поместив соответствующую строчку в реестр
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                    string name = System.Windows.Forms.Application.ProductName;
                    string ExePath = string.Format
                        (
                        "{0} -nogui",
                        System.Windows.Forms.Application.ExecutablePath.ToString().Replace("EXE","exe")
                        );
                    Microsoft.Win32.RegistryKey reg;
                    reg = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
                    
                    try
                    {        
                                        
                        reg.SetValue(name, ExePath);                        
                        reg.Close();
                    }
                    catch { }
Код открытия программы такой:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace RZD_Bonus_Keep
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.SetCompatibleTextRenderingDefault(false);
 
            // создаём трей и всё для него
            // контекстное меню
            var contmenu = new System.Windows.Forms.ContextMenu();
            var menuItem1 = new System.Windows.Forms.MenuItem();
            menuItem1.Text = "RZD Bonus Keep";
            
            var menuItemSplitter =  new System.Windows.Forms.MenuItem();
            menuItemSplitter.Text = "-";
 
            var menuItem2 = new System.Windows.Forms.MenuItem();
            menuItem2.Text = "Открыть окно программы";
            menuItem2.Click += new System.EventHandler(menuItemClick);
 
            var menuItem3 = new System.Windows.Forms.MenuItem();
            menuItem3.Text = "О программе";
 
            var menuItem4 = new System.Windows.Forms.MenuItem();
            menuItem4.Text = "Выход";
            menuItem4.Click += new  System.EventHandler(menuItem4Click);
 
            contmenu.MenuItems.AddRange(
                new System.Windows.Forms.MenuItem[] 
{
    menuItem1,
    menuItemSplitter,
    menuItem2,
    menuItem3,
    menuItemSplitter,
    menuItem4    
}
                );
            
                
            // всё по трею
            NotifyIcon tray = new System.Windows.Forms.NotifyIcon();
            tray.Visible = true;
            tray.Icon = new System.Drawing.Icon("ico.ico");
 
            tray.Text = "RZD Bonus Keeper";
            tray.ContextMenu = contmenu;
           
            tray.MouseClick += new MouseEventHandler(trayClick);
 
            if (args.Length>0)
            {
                // запуск без окна
                Application.Run();
                
            }
            else
            {
                // Запуск в графическом режиме
                fmain = new fMain();
                Application.Run(fmain);
            }
        }
 
        static fMain fmain;
        private static void trayClick(object Sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                GoGraphicView();
        }
 
        // клик по контекстному меню Открыть программу
        private static void menuItemClick(object Sender, EventArgs e)
        {      
            GoGraphicView();
        }
 
        private static void menuItem4Click(object Sender, EventArgs e)
        {
            if (MessageBox.Show("Вы уверены, что хотите закрыть приложение?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                Application.Exit();
        }
 
        static void GoGraphicView()
        {
            // Запуск в графическом режиме
            // форма может быть уже запущена
            if (fmain == null)
            {
                Application.EnableVisualStyles();
                fmain = new fMain();
                fmain.Show();
            }
            else
            {
                fmain.WindowState = FormWindowState.Maximized;
            }
        }
 
        
    }
}
При попытке запуститься автоматом со стартом винды получаем ошибку:
XML
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
<?xml version="1.0" encoding="UTF-16"?>
 
-<WERReportMetadata>
 
 
-<OSVersionInformation>
 
<WindowsNTVersion>6.1</WindowsNTVersion>
 
<Build>7601 Service Pack 1</Build>
 
<Product>(0x30): Windows 7 Professional</Product>
 
<Edition>Professional</Edition>
 
<BuildString>7601.18798.amd64fre.win7sp1_gdr.150316-1654</BuildString>
 
<Revision>1130</Revision>
 
<Flavor>Multiprocessor Free</Flavor>
 
<Architecture>X64</Architecture>
 
<LCID>1049</LCID>
 
</OSVersionInformation>
 
 
-<ProblemSignatures>
 
<EventType>CLR20r3</EventType>
 
<Parameter0>RZD-Bonus Keep.exe</Parameter0>
 
<Parameter1>1.0.0.0</Parameter1>
 
<Parameter2>587fa65e</Parameter2>
 
<Parameter3>mscorlib</Parameter3>
 
<Parameter4>4.6.1055.0</Parameter4>
 
<Parameter5>563c0eac</Parameter5>
 
<Parameter6>157f</Parameter6>
 
<Parameter7>ca</Parameter7>
 
<Parameter8>System.IO.FileNotFoundException</Parameter8>
 
</ProblemSignatures>
 
 
-<DynamicSignatures>
 
<Parameter1>6.1.7601.2.1.0.256.48</Parameter1>
 
<Parameter2>1049</Parameter2>
 
<Parameter22>0a9e</Parameter22>
 
<Parameter23>0a9e372d3b4ad19135b953a78882e789</Parameter23>
 
<Parameter24>0a9e</Parameter24>
 
<Parameter25>0a9e372d3b4ad19135b953a78882e789</Parameter25>
 
</DynamicSignatures>
 
 
-<SystemInformation>
 
<MID>7BA09EA0-B8C7-47C2-AF7D-C48FE21EE57D</MID>
 
<SystemManufacturer>To be filled by O.E.M.</SystemManufacturer>
 
<SystemProductName>To be filled by O.E.M.</SystemProductName>
 
<BIOSVersion>2501</BIOSVersion>
 
</SystemInformation>
 
</WERReportMetadata>
В интернете не нашёл решения. опытным путём понял, что, если закомментить строку кода
C#
1
tray.Icon = new System.Drawing.Icon("ico.ico");
то ошибка не возникает, правда соответственно и иконка в трее не выходит.

В референсах у System.Drawing стоят такие настройки
Ошибка при запуске приложения в случае автозапуска при старте Windows


Что сделать чтобы ошибка не возникала, куда копать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2017, 20:56
Ответы с готовыми решениями:

Написать файл, принимающий при старте параметр имя приложения при запуске
1.Написать файл,принимающий при старте параметр имя приложения при запуске. файл должен запустить...

Ошибка при запуске программы, из автозапуска
Приветствую всех! Ситуация такая: если запускаю программу, то всё работает - окей. Перезагружаю, и...

Ошибка при запуске приложения на Windows 7 (64 and 32 bit)
Короче я написал приложение в Microsoft Visual Studio 2010 с использованием NET 2.0,...

Запуск приложения при старте windows
Вообщем интересует так как сделать запуск приложения при старте windows и чтобы его можно было...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
2
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
18.01.2017, 21:02 2
Цитата Сообщение от Antykus Посмотреть сообщение
Что сделать чтобы ошибка не возникала
У вас ошибка FileNotFound, и судя по всему, не найден путь к файлу иконки. Попробуйте поместить файл иконки в ресурсы и оттуда его использовать, а не из отдельного файла.
1
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
18.01.2017, 21:17  [ТС] 3
insite2012, да, проблема решена, спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2017, 21:17

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

Ошибка при инициализации приложения 0xc0000135 (при запуске игры)
У меня возникла &quot; Ошибка при инициализации приложения (0xc0000135)&quot; и.тп при запуске игры...Решила...

Ошибка при обращении к Label при запуске приложения
Ошибка в строке Form1.Label1.Caption:=DateToStr(today); Помогите исправить ошибку unit...

Ошибка при запуске приложения под Windows XP: "Не является приложением Win32"
Здравствуйте, написал приложение на Visual Studio Express 2013. У меня ОС Windows 7 x64. Работает...

нужна консультация! ошибка при старте windows 7
здравствуйте! у меня каждый раз при входе в windows 7 (профессиональная, service pack 1, 64)...


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

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

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