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

498
20 января 2017, 05:51

Мне нужно иметь два способа запуска моей программы: обычный запуск с отображением формы, и скрытый запуск без отображения формы - при запуске винды. В обоих случаях создаётся иконка в трее. Сделал так: если количество параметров, передаваемых при запуске более нуля, значит запускаем скрытно. Работает как надо. Далее я сделал так, чтобы прога автоматом запускалась при старте винды, поместив соответствующую строчку в реестр

Код открытия программы

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 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>

В интернете не нашёл решения. опытным путём понял, что, если закомментить строку кода tray.Icon = new System.Drawing.Icon("ico.ico"); то ошибка не возникает, правда соответственно и иконка в трее не выходит.

В референсах у System.Drawing copylocal стоит в true.

Что сделать чтобы ошибка не возникала, куда копать?

Answer 1

Проблему решил следующим образом: Использовал properties.resources

READ ALSO
LinqToSql как поменять псевдоним поля

LinqToSql как поменять псевдоним поля

Есть запрос на выборку данных, которые отправляются в dataGrid WPF:

337
Прерывается работа couroutine (Unity3d)

Прерывается работа couroutine (Unity3d)

Всем приветПишу Space Shooter

397
Насколько верное решение placeholder textbox c#?

Насколько верное решение placeholder textbox c#?

Искал в интернете как сделать placeholder для TextBox но не нашел компактного кода и решил изобрести еще один велосипед

464