2012-05-22 3 views
0

Я разрабатываю приложение на основе vbnet/C# .NET, которое открывает файлы с различными приложениями (excel, word и т. Д.).В VB.NET проверить изменения в файле, запущенном с process.start()

Приложение запускается с использованием Dim app As Process = Process.Start(ProcessProperties)

Теперь, когда я должен завершить процесс я использую app.Kill(), но мне нужно проверить, если документ был изменен, прежде чем убить его.

Как я могу справиться с этим? И если это возможно, как я могу запустить собственное приглашение приложения для сохранения?

Благодаря

ответ

4

Для офисных приложений используют Office Interop Assemblies, не Process.Start, чтобы начать и управлять ими. Вот пример кода для Excel (в VB.NET). Вы должны добавить Microsoft.Office.Interop.Excel.dll к проектам, чтобы это работало.

oExcel = New Microsof.Office.Interop.Excel.Application 
    oBook = oExcel.Workbooks.Open(filepath) 
    'Do your stuff 
    oBook.Close 'This will trigger the application native prompt if the document was modified 
    oExcel.Quit() 

Для других программ это во многом зависит от программы

0

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

Эта часть не очень ясна из вашего вопроса. Если документ будет сохранен, возможно, вы можете посмотреть значение date_modified файла, чтобы узнать, были ли какие-либо изменения.

+0

Я думаю, что ОП означает несохраненные изменения. Хотя это не совсем понятно. –

2

Вы можете достичь поведения, близкого к тому, что вам нужно, позвонив по телефону Process.CloseMainWindow, а не в Process.Kill.

Поведение CloseMainWindow идентично поведению пользователя, закрывающего главное окно приложения в системном меню. Поэтому запрос на выход из процесса, закрывая главное окно, не заставляет приложение немедленно прекратить работу.

Данные, отредактированные процессом или ресурсами, выделенными для процесса, могут быть потеряны, если вы вызываете Kill. Kill вызывает ненормальное завершение процесса и должно использоваться только при необходимости. CloseMainWindow обеспечивает упорядоченное завершение процесса и закрывает все окна, поэтому он предпочтительнее для приложений с интерфейсом.

В случае приложений Office с несохраненными изменениями CloseMainWindow запустит диалог «Сохранить». Вам нужно будет обрабатывать сценарии, в которых пользователи нажимают «Отмена», поскольку это может привести к блокировке блокировки WaitForExit на неопределенный срок.

Например:

// Launch Word application. 
Process wordProcess = 
    Process.Start(@"C:\Program Files (x86)\Microsoft Office\Office12\winword.exe"); 

// Give user some time to type in text. 
Thread.Sleep(TimeSpan.FromSeconds(20)); 

// Request Word to close. 
wordProcess.CloseMainWindow(); 

// Wait until user saves or discards changes. 
// May block indefinitely if user cancels. 
wordProcess.WaitForExit();