Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/35: Рейтинг темы: голосов - 35, средняя оценка - 4.80
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46

Ошибка с процессами.

21.10.2010, 09:42. Показов 7127. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код, открывающий файл из базы данных:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
filename = "~tmp" + dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["filenameDataGridViewTextBoxColumn"].Value as string;
            try
            {
                SqlConnection cn = new SqlConnection(ConnectionString);
                SqlCommand cmd = new SqlCommand("USE requests; SELECT fil FROM files WHERE (id = " + dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["idDataGridViewTextBoxColumn"].Value + ")", cn);
                {
                    try
                    {
                        cn.Open();
                        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                        FileStream fs = new FileStream(filename,  FileMode.Create, FileAccess.Write);
                        //File.SetAttributes(filename, FileAttributes.Hidden);
                        if (dr.Read())
                        {
                            byte[] b = new byte[(dr.GetBytes(0, 0, null, 0, int.MaxValue))];
                            dr.GetBytes(0, 0, b, 0, b.Length);
                            fs.Write(b, 0, b.Length);
                        }
                        fs.Close();
                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.Message, "Ошибка");
                    }
                }
            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show(ex.Message);
            }
            Process prc = null;
            string output = string.Empty;
            try
            {
                prc = new Process();
                prc.StartInfo.FileName = filename;
                prc.Start();
                prc.WaitForExit();
            }
            finally
            {
                if (prc != null)
                {
                    prc.Close();
                    File.Delete(filename);
                }
            }
Всё работает хорошо, будь то файл-картинка или doc. или xls.
НО возникла проблема: если запущен Microsoft Word например, то при попытке выполнения вышеуказанного кода, вылетает ошибка на строке:
C#
1
prc.WaitForExit();
Ошибка: Нет процессов, связанных с этим объектом.

Хотя файл он открывает, а при попытке ожидания выдает, что нет процесса.
Повторяю, это возникает, если запущен Word. Если word не запущен, файл открывается и после закрытия Word'a удаляется без проблем.

В чем проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2010, 09:42
Ответы с готовыми решениями:

Ошибка при передачи данных между процессами unity3d и консольным сервером . System.IO.Pipes
Консольный клиент работает без ошибок. Юнити не правильно передаёт ответ серверу (имя файла). Код идентичен. Имя файла с клиента юнити...

Работа с процессами
Здравствуйте!Помогите пожалуйста выполнить следующее задание: Процесс 1 порождает потомка 2, который в свою очередь порождает потомка 3....

Работа с процессами
Ктонибудь знает как програмно приостановить все проессы кроме системных хочу сделать чтото вроде DrWeb ?

6
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
21.10.2010, 13:09
При повторном открытии Word проверяет - запускался ли он ранее. Если да, файл передается предыдущей копии, а текущий процесс закрывается. Можно даже проверить - с txt, если основная программа Notepad, такой ошибки возникать не будет.
0
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46
21.10.2010, 13:16  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
При повторном открытии Word проверяет - запускался ли он ранее. Если да, файл передается предыдущей копии, а текущий процесс закрывается. Можно даже проверить - с txt, если основная программа Notepad, такой ошибки возникать не будет.
Ну это понятно. Как быть в таком случае? Как вычислить процесс, если ворд был запущен? Как ожидать закрытие именно этого процесса?
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
21.10.2010, 13:21
Используем Process.GetProcesses(), в возвращенном массиве ищем word.exe и вешаемся на него.
2
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46
21.10.2010, 14:37  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
Используем Process.GetProcesses(), в возвращенном массиве ищем word.exe и вешаемся на него.
Спасибо. Сейчас пробую.

Добавлено через 48 минут
Цитата Сообщение от planar Посмотреть сообщение
Используем Process.GetProcesses(), в возвращенном массиве ищем word.exe и вешаемся на него.
Всё-то ты правильно говоришь, но чо-то я ща подумал, смотри:
Если открыт какой-либо документ ворд на компе. В процессах есть WINWORD. Я запускаю свой процесс, вешаю на WINWORD и жду закрытия приложения, чтобы удалить файл (так программа должна работать). Но после закрытия документа, процесс винворд-то останется висеть и файл не удалится, а удалится только после того как закроется первоначальнооткрытый ворд.
Как-нибдь можно сделать чтобы файл удалялся после закрытия документа?
Надеюсь более менее понятно написал
0
21.10.2010, 14:39

Не по теме:


Вопрос интересный, надо подумать. Раньше вечера ответить не могу - сейчас на работе.

0
1 / 1 / 3
Регистрация: 23.08.2010
Сообщений: 46
22.10.2010, 06:31  [ТС]
Получается так: при открытии файла .doc (если уже запущен word) процесс мой самопроизвольно убивается. Поэтому и ошибка, что нет процесса.
Сделал так:
Если расширение файла doc или docx, тогда смотрю все процессы на компе. Если есть процесс WINWORD, тогда свой процесс привязываю к WINWORD'у. То же самое с EXCEL и POWERPNT.

Всё работает, всё хорошо.

Но возникло две проблемы:
1. После закрытия документа, у меня должен файл удаляться, а у меня что происходит? Файл удаляется только после того, как процесс WINWORD полностью завершится, то есть закроются ВСЕ документы WINWORD. Как сделать так, чтобы после закрытия моего файла в ворде. удалялся файл.
2. Нужен какой-то универсальный способ, ибо я написал для трёх программ (WINWORD, EXCEL, POWERPNT - именно так они называются в процессах). А если файл будет Microsoft Visio и иже с ним? А если microsoft решит переименовать процеесы и будут они называться по другому, так что мне программу переписывать надо будет??

Помогите, пожалуйста советом. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2010, 06:31
Помогаю со студенческими работами здесь

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

Работа с процессами
Скажите, PID и handle процесса - это не одно и то же? Мне известно имя исполняемого файла. Как, используя это имя, получить хендл...

Работа с процессами
С пидом и экзешниками я разобрался вроде. Хотелось бы иметь данные о процессах в количестве хотя бы равном менеджеру (загрузка...

Работа с процессами
Привет друзья! Необходимо написать диспетчер процессов. Суть: 1. При вводе 'p' отображается дерево вида: 2. При вводе 'k...

Управление процессами из C#
Добрый день. Только начинаю что-то делать на C# поэтому сорри если вопрос откровенно дурацкий. Задача состоит в том, чтобы написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru