инсталлятор и запись в реестр
От: Аноним  
Дата: 03.02.11 02:37
Оценка:
у меня при старте программы она прописывается в реестр (на запуск). Всё работает отлично кроме случая, когда программа запускается после инсталляции по коду:


        private void Installer1_AfterInstall(object sender, InstallEventArgs e)
        {
            try
            {
                System.Diagnostics.Process process = new System.Diagnostics.Process();
                string assemblyDir = System.IO.Path.GetDirectoryName(Context.Parameters["assemblypath"]);

                process.StartInfo.FileName = assemblyDir + System.IO.Path.DirectorySeparatorChar + "MyProgram.exe";
                process.Start();
            }
            catch (Exception ex)
            {
            }
        }


в этом случае запись в реестр не происходит (я так понимаю, что не хватает permissions). Как правильно поставить эти permissions?
Re: инсталлятор и запись в реестр
От: Pavel Dvorkin Россия  
Дата: 03.02.11 13:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в этом случае запись в реестр не происходит (я так понимаю, что не хватает permissions). Как правильно поставить эти permissions?


Уверен, что не происходит ? Куда она должна писать, в HKCU ? Инсталлятор работает от админа, у него свой HKCU.

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

Насчет permissions — если их не хватает, получил бы SecurityException. Есть его обработка ?
With best regards
Pavel Dvorkin
Re[2]: инсталлятор и запись в реестр
От: Аноним  
Дата: 03.02.11 20:50
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Аноним, Вы писали:


А>>в этом случае запись в реестр не происходит (я так понимаю, что не хватает permissions). Как правильно поставить эти permissions?


PD>Уверен, что не происходит ? Куда она должна писать, в HKCU ? Инсталлятор работает от админа, у него свой HKCU.



public static readonly string autostartkey = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run";

у меня 2 юзера — мой юзер (по совместительству админ) и гость. Система — семерка 32 бит. Ключ точно не создаётся в "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run". Или есть ещё какой-то HKCU ?
Как только запускаю по иконке установленную прогу — как сразу таким же кодом записывается.

PD>На всякий случай поищи в реестре, может просто не туда записалось.


больше нет записей

PD>Насчет permissions — если их не хватает, получил бы SecurityException. Есть его обработка ?


нету. А как его обработать и где?
Re[3]: инсталлятор и запись в реестр
От: Аноним  
Дата: 03.02.11 21:34
Оценка:
стало писать, странно как-то. В общем, эта проблема пропала, но появилась другая.

Есть следующий код, который запускается в Form_Load


        void DeserializeSelectedDevice()
        {
            if (System.IO.File.Exists(ShellFolder.DocumentsFolderSys() + "selectedDevice.bin"))
            {
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                try
                {
                    using (System.IO.FileStream fileStream = new System.IO.FileStream(ShellFolder.DocumentsFolderSys() + "selectedDevice.bin", System.IO.FileMode.Open))
                    {
                        MyDevice = (Device)formatter.Deserialize(fileStream);
                    }
                }
                catch (Exception ex)
                {
                    using (System.IO.TextWriter writer = System.IO.File.CreateText(logfilepath))
                    {
                        writer.WriteLine(ex.Message + " " + DateTime.Now.ToString());
                    }
                }
            }
            else
            {
                using (System.IO.TextWriter writer = System.IO.File.CreateText(logfilepath))
                {
                    writer.WriteLine("File 'selectedDevice.bin' does not exist " + DateTime.Now.ToString());
                }
            }
        }


этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?
Re[4]: инсталлятор и запись в реестр
От: Pavel Dvorkin Россия  
Дата: 04.02.11 08:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>стало писать, странно как-то. В общем, эта проблема пропала


Вообще-то ничего хуже нет, чем проблемы, пропадающие без видимой причины — плавающие ошибки. Как пропадают, так и опять могут появиться. Надо выяснять.

> но появилась другая.


А>Есть следующий код, который запускается в Form_Load


А>этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?


Странно. Что значит "не вызывается" ? Form_Load вызывается ? Если да, то как понять, что код, который в ней, не вызывается ? Поставь вывод в лог и посмотри, что там происходит.
With best regards
Pavel Dvorkin
Re[5]: инсталлятор и запись в реестр
От: Аноним  
Дата: 04.02.11 18:03
Оценка:
А>>этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?

PD>Странно. Что значит "не вызывается" ? Form_Load вызывается ? Если да, то как понять, что код, который в ней, не вызывается ? Поставь вывод в лог и посмотри, что там происходит.


пытаюсь логгировать в файл, но там объекты, а их логгировать тяжело. В общем, буду что-то думать.
А пока вопрос можно ли как-то дебаггер присандалить? Пробовал Debugger.Break(), но что-то если запускается с автозапуска то оно не цепляет студию (вылазит ошибка), если запускать ручками — всё хорошо. Чую, проблема в каких-то правах доступа
Re[6]: инсталлятор и запись в реестр
От: Pavel Dvorkin Россия  
Дата: 05.02.11 05:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?


PD>>Странно. Что значит "не вызывается" ? Form_Load вызывается ? Если да, то как понять, что код, который в ней, не вызывается ? Поставь вывод в лог и посмотри, что там происходит.


А>пытаюсь логгировать в файл, но там объекты, а их логгировать тяжело.


Да не надо там ничего тяжелого. Вот, например, по этому твоему сообщению

http://rsdn.ru/forum/dotnet/4141847.1.aspx
Автор:
Дата: 04.02.11


логируй факт входа в Form_Load, DeserializeSelectedDevice и значения MyDevice, Exception (кстати, почему именно любой Exception там ловится, это вроде как нехорошо) и т.д. Несколько строчек, выводи в файл, в который гарантированно вывод всегда возможен.

А>А пока вопрос можно ли как-то дебаггер присандалить? Пробовал Debugger.Break(), но что-то если запускается с автозапуска то оно не цепляет студию (вылазит ошибка), если запускать ручками — всё хорошо. Чую, проблема в каких-то правах доступа


Не в курсе.
With best regards
Pavel Dvorkin
Re[7]: инсталлятор и запись в реестр
От: Аноним  
Дата: 05.02.11 14:15
Оценка:
PD>логируй факт входа в Form_Load, DeserializeSelectedDevice и значения MyDevice, Exception (кстати, почему именно любой Exception там ловится, это вроде как нехорошо) и т.д. Несколько строчек, выводи в файл, в который гарантированно вывод всегда возможен.


это я логгировал, ничего полезного мне этого не давало. Полностью те же вызовы, что и в случае с корректной работой В общнем, ошибку я не нашёл почему так происходило, хотя только что (как начал писать тебе сообщение) меня натолкнуло на мысль, что проблема была не в правах доступа, а в том, что при сериализации сохранялись какие-то хендлеры, а при рестарте они не могли восстановиться (у меня работа с блютуз)! Хотя я уже всё переделал под ручную сериализацию, сохраняю "ключевые" поля, по которым потом ищу девайс в окружении.
В общем, спасибо тебе, хотя ни один из твоих советов мне прямо не помог, зато косвенно благодаря тебе я всё и сделал. Твои посты заставляли меня по-другому думать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.