Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2018, 17:23   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Повредился файл исходного кода

Здравствуйте.
Вот я уже второй день пишу программу для работы, и по большому счёту - программа уже почти готова.
Тут произошла интересная ситуация: я решил добавить функционал, который не позволит запускать дубликаты этой программы (не обязательно, но желательно).
В процессе тестирования я словил BSoD. А я всего то из конструктора полез убивать такие же процессы. Но после первой синьки вроде ничего не произошло, проект запустил и погнал выпиливать предполагаемый баг.
Запустил программу - и опять синька. Ну то ладно, то что я быдло-говно-кодер - это и так всем известно. Речь не об этом.
После второй синьки я попытался открыть проект, и вместо своего кода увидел попытки среды открыть файл в блокноте. В самой среде он открываться не захотел.
Открыл файл с кодом в блокноте - и увидел 10 килобайт символов null (notepad++).

За сам код я переживал не долго, поднял ILSpy, восстановил.

Вопрос такой: что конкретно я сделал не так в коде ?
Разве из конструктора (формы) нельзя убивать процессы ?
И как это повлияло на файл исходника ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 30.01.2018, 17:51   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А что в бсоде-то?

https://www.nirsoft.net/utils/blue_s...#DownloadLinks
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.01.2018, 18:17   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А что в бсоде-то?
У меня как то не было времени смотреть, что произошло ... Увидел только то, что дамп памяти занимал какое то время.
Я так понял, что во второй раз код повредился из-за того, что я стартовал отладку под средой разработки.
Сейчас подниму виртуаль, посмотрю, что там будет происходить.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 30.01.2018, 18:22   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Во !
Изображения
Тип файла: png BSoD.png (19.4 Кб, 92 просмотров)
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 30.01.2018, 18:22   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Причем тут время? Дамп он на то и создается.
Выше ж ссылка на программу для просмотра данных бсода.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 30.01.2018, 18:27   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Код, без которого всё нормально:
Код:
Process[] processes = Process.GetProcesses();
Process currentProcess = Process.GetCurrentProcess();
for (int i = 0; i < processes.Length; i++)
{
	if (processes[i].StartInfo.FileName == currentProcess.StartInfo.FileName && processes[i].Id != currentProcess.Id)
		processes[i].Kill();
	processes[i].Dispose();
}
currentProcess.Dispose();
Выполняется в конструкторе формы.
Я подумал было дело в Dispose(), пока перепроверить не успеваю ... Но я раньше так делал преспокойно, где угодно - и всё работало исправно.
Типа Dispose() убивает объект, а не процесс.

UPD: StartInfo.FileName пустой (ниже обратили внимание), нужно юзать MainModule.FileName.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 31.01.2018 в 16:46.
OmegaBerkut вне форума Ответить с цитированием
Старый 30.01.2018, 18:36   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Чувак, ты изобрёл функцию, вызывающую BSOD? Да ты же гений!
Перепиши на С++, с меня пиво!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 30.01.2018, 18:54   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Чувак, ты изобрёл функцию, вызывающую BSOD? Да ты же гений!
Перепиши на С++, с меня пиво!
Я так подозреваю, что это сарказм.
Если серьёзно - что тут не так ?
Можете у себя проверить, у вас такая же дичь ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 30.01.2018, 19:02   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Можете у себя проверить, у вас такая же дичь ?
Я так подозреваю, что это сарказм.
Цитата:
из конструктора полез убивать такие же процессы
И это.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 30.01.2018, 19:34   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Тогда уж currentProcess убивать, а то это не запрет запуска второй копии, а попытка убить первую, только StartInfo зачем? - Там пусто, в итоге не более чем все процессы умирают.
И вообще, зачем убивать детей? Может проще не дать им родиться используя, например, презерватив или обёртки
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл вещественных чисел. Создать файл целых чисел, содержащий длины всех убывающих последовательностей элементов исходного файла. Например, для исходного файла с элементами 1.7 faza9444 C# (си шарп) 1 27.11.2017 22:23
Компиляция исходного кода vitekrock Общие вопросы по Java, Java SE, Kotlin 5 05.12.2010 21:24
Из исходного кода в Cookies x852x Общие вопросы Delphi 0 21.03.2010 13:09
Анализ исходного кода heart Безопасность, Шифрование 7 31.12.2009 08:26
Анализ исходного кода SwitchMan Паскаль, Turbo Pascal, PascalABC.NET 1 25.04.2009 18:14