none
Приложение запускается только у меня и ни у кого больше, странное поведение. RRS feed

  • Вопрос

  • Добрый день, задача реализовать маленькую утилиту которая будет выводить на раб стол версию ОС, вкл/откл Active Desktop, вкл/откл всплывающие подсказки.

    Я реализовал что при запуске чекбоксы наполняются в зависимости от значений соответствующих параметров ключей реестра. Если параметра нет, утилита его создаст со значением по умолчанию. У меня приложение работает без ошибок и запускается, но как только пытаюсь запустить на какой нибудь другой машине оно(приложение) не запускается (процесс появляется и через секунд 5 потухает) ничего при это не появляется. 

    Ниже приложил код, посмотрите в чем проблема почему она запускается только у меня.?

    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;
    using Microsoft.Win32;
    using AReboot;
    
    namespace OneUnit
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                using (var key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop"))
                {
                    if (key == null)
                    {
                        //Создать нужный ключ реестра
                        RegistryKey createKey = Registry.CurrentUser;
                        createKey.CreateSubKey(@"Control Panel\Desktop");
                        createKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
                        createKey.SetValue("PaintDesktopVersion", 0); 
                    }
                    var currentKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop");
                    var value = currentKey.GetValue("PaintDesktopVersion");
                    string control = "1";
                    if (value.ToString() == control)
                    {
                        checkBox1.Checked = true;
                    }
                    else
                    {
                        checkBox1.Checked = false;
                    }
                }
                
                using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"))
                {
                    if (key == null)
                    {
                        //Создать нужный ключ реестра
                        RegistryKey createKey = Registry.CurrentUser;
                        createKey.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer");
                        createKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer",true);
                        createKey.SetValue("ForceActiveDesktopOn", 0); 
                    }
                    var currentKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer");
                    var value = currentKey.GetValue("ForceActiveDesktopOn");
                    string control = "0";
                    if (value.ToString() == control)
                    {
                        checkBox2.Checked = true;
                    }
                    else
                    {
                        checkBox2.Checked = false;
                    }
                    
                }
                
    
                using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"))
                {
                    if (key == null)
                    {
                        //Создать нужный ключ реестра
                        RegistryKey createKey = Registry.CurrentUser;
                        createKey.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced");
                        createKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true);
                        createKey.SetValue("ShowInfoTip", 1);
                    }
                    var currentKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced");
                    var value = currentKey.GetValue("ShowInfoTip");
                    string control = "0";
                    if (value.ToString() == control)
                    {
                        checkBox3.Checked = true;
                    }
                    else
                    {
                        checkBox3.Checked = false;
                    }
                }
                
            }
    
            private bool flagExit = false;
    
            public bool ValueExit
            {
                get
                {
                    return flagExit;
                }
                set
                {
                    flagExit = value;
                }
            }
    
    
            public void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (flagExit == true)
                {   
                    e.Cancel = false;
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                    this.Hide();
                }
            }
    
            private void toolStripMenuItem1_Click(object sender, EventArgs e)
            {
                this.Show();
            }
    
            private void toolStripMenuItem2_Click(object sender, EventArgs e)
            {
                flagExit = true;
                Application.Exit();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (checkBox1.Checked == true)
                {
                    Function.ChangeWinLogo(true);
                }
                else
                {
                    Function.ChangeWinLogo(false);
                }
    
                if (checkBox2.Checked == true)
                {
                    Function.ChangeActiveDesk(true);
                }
                else
                {
                    Function.ChangeActiveDesk(false);
                }
    
                if (checkBox3.Checked == true)
                {
                    Function.ChangeShowTips(true);
                }
                else
                {
                    Function.ChangeShowTips(false);
                }
    
                var resultDialog = MessageBox.Show("Изменения вступят в силу после перезагрузки. Перезагрузить компьютер?", "OneUnit", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (resultDialog == System.Windows.Forms.DialogResult.Yes)
                {
                    reboot.halt(true, false);
                }
            }
        }
    }
    

    17 октября 2012 г. 10:47

Ответы

  • Вы правы, при создании ключа параметр RegistryKey.OpenSubKey Method (String, Boolean), параметр writable не указал true после чего не мог записать в него значение. Проблема решена.
    Всем большое спасибо :)
    • Помечено в качестве ответа Abolmasov Dmitry 18 октября 2012 г. 13:46
    18 октября 2012 г. 13:42

Все ответы

  • Посмотрите в эвент лог, проверьте, что там нет дополнительных сведений о краше.

    Проверьте, что версия дот нета на машине установлена нужная.

    Добавьте в код try-catch, чтобы убедиться, что это проблема в коде, а не в машине.

    17 октября 2012 г. 11:01
    Отвечающий
  • Антон, добавил в код try-catch при запуске появилось такое исключение:

    при создании параметра ForceActiveDesktopOn. Но в реестре он создался. Программа продолжила работу. При повторном запуске все прошло гладко и исключение не генерировалось. 

    Все таки я не понял почему генерируется исключение.

    17 октября 2012 г. 18:58
  • Прав не хватает? Может от имени администратора нужно попробовать запустить.
    18 октября 2012 г. 4:30
    Модератор
  • Привет.

    Вы у себя на XP запускаете? Посмотрите в коде строку 65 что там за запись в реестр и в какую ветку. Вот у того пользователя от которого вы запускаете программу должны быть права на эту ветку реестра. Либо в программе добавиться требования запуска от администратора, как сказал ulcer. Это должно решить проблему.


    Для связи [mail]

    18 октября 2012 г. 8:15
  • Зайдите через regedit в нужную ветку, и в контекстном меню выберите свойство Permissions, для текущего юзера будет разрешено только чтение.


    Для связи [mail]

    18 октября 2012 г. 8:21
  • Вы правы, при создании ключа параметр RegistryKey.OpenSubKey Method (String, Boolean), параметр writable не указал true после чего не мог записать в него значение. Проблема решена.
    Всем большое спасибо :)
    • Помечено в качестве ответа Abolmasov Dmitry 18 октября 2012 г. 13:46
    18 октября 2012 г. 13:42