у меня при старте программы она прописывается в реестр (на запуск). Всё работает отлично кроме случая, когда программа запускается после инсталляции по коду:
Здравствуйте, Аноним, Вы писали:
А>в этом случае запись в реестр не происходит (я так понимаю, что не хватает 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());
}
}
}
этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?
Здравствуйте, Аноним, Вы писали:
А>стало писать, странно как-то. В общем, эта проблема пропала
Вообще-то ничего хуже нет, чем проблемы, пропадающие без видимой причины — плавающие ошибки. Как пропадают, так и опять могут появиться. Надо выяснять.
> но появилась другая.
А>Есть следующий код, который запускается в Form_Load
А>этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?
Странно. Что значит "не вызывается" ? Form_Load вызывается ? Если да, то как понять, что код, который в ней, не вызывается ? Поставь вывод в лог и посмотри, что там происходит.
With best regards
Pavel Dvorkin
Re[5]: инсталлятор и запись в реестр
От:
Аноним
Дата:
04.02.11 18:03
Оценка:
А>>этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?
PD>Странно. Что значит "не вызывается" ? Form_Load вызывается ? Если да, то как понять, что код, который в ней, не вызывается ? Поставь вывод в лог и посмотри, что там происходит.
пытаюсь логгировать в файл, но там объекты, а их логгировать тяжело. В общем, буду что-то думать.
А пока вопрос можно ли как-то дебаггер присандалить? Пробовал Debugger.Break(), но что-то если запускается с автозапуска то оно не цепляет студию (вылазит ошибка), если запускать ручками — всё хорошо. Чую, проблема в каких-то правах доступа
Здравствуйте, Аноним, Вы писали:
А>>>этот код вызывается при ручном запуске проги и почему-то не вызывается при автостарте. Почему?
PD>>Странно. Что значит "не вызывается" ? Form_Load вызывается ? Если да, то как понять, что код, который в ней, не вызывается ? Поставь вывод в лог и посмотри, что там происходит.
А>пытаюсь логгировать в файл, но там объекты, а их логгировать тяжело.
Да не надо там ничего тяжелого. Вот, например, по этому твоему сообщению
логируй факт входа в 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 там ловится, это вроде как нехорошо) и т.д. Несколько строчек, выводи в файл, в который гарантированно вывод всегда возможен.
это я логгировал, ничего полезного мне этого не давало. Полностью те же вызовы, что и в случае с корректной работой В общнем, ошибку я не нашёл почему так происходило, хотя только что (как начал писать тебе сообщение) меня натолкнуло на мысль, что проблема была не в правах доступа, а в том, что при сериализации сохранялись какие-то хендлеры, а при рестарте они не могли восстановиться (у меня работа с блютуз)! Хотя я уже всё переделал под ручную сериализацию, сохраняю "ключевые" поля, по которым потом ищу девайс в окружении.
В общем, спасибо тебе, хотя ни один из твоих советов мне прямо не помог, зато косвенно благодаря тебе я всё и сделал. Твои посты заставляли меня по-другому думать