как узнать что Microsoft.Office.Interop.Word выкинул диалоговое окно?

Андрей Панфилов
Дата: 15.01.2010 12:01:13
Добрый день!

для автоматизации работы с водром использую Microsoft.Office.Interop.Word

+
    public static Word.Application getWordApplication () 
    {
        Word.Application word = null;
        try
        {
            word = new Word.Application();
            word.Visible = false;
            //word.Activate();
        }
        catch (COMException ex) 
        {
            word.Quit(ref falseValue, ref missing, ref missing);
            Marshal.ReleaseComObject(word);
            throw ex;
        }
        return word;
    }


    public static Word.Document getMSWord(Word.Application word, string filename) 
    {
        Word.Document doc = null;

        object fileName = filename;

        try
        {
            doc = word.Documents.Open(ref fileName,
                        ref missing,
                        ref falseValue,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing,
                        ref missing);
            doc.Activate();

        }
        catch (COMException ex)
        {
            word.Quit(ref falseValue, ref missing, ref missing);
            Marshal.ReleaseComObject(word);
            throw ex;
        }
        return doc;    
    }


иногда случается, что файл приходит битый и word выкидывает окошко с сообщением (или например файл уже кем-то открыт и появляется предупреждении) и приложение зависает на Activate, как подобную ситуацию перехватить в коде (нужно автоматически без вмешательства пользователя)?
asmod64
Дата: 15.01.2010 12:27:08
Андрей Панфилов,

как вариант

Word.Application.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
и на
doc = word.Documents.Open(ref fileName,....
поймаете исключение
Андрей Панфилов
Дата: 15.01.2010 12:37:06
asmod64,

а как document is locked for editing by ... отловить?
asmod64
Дата: 15.01.2010 13:18:53
Андрей Панфилов
asmod64,

а как document is locked for editing by ... отловить?

проверить перед открытием документа есть доступ к файлу для записи или нет
            try {
                FileStream f = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite); 
                f.Close(); 
            }
            catch(IOException e) { 
            }

Курочка Ряба
Дата: 15.01.2010 13:26:04
asmod64
f.Close();

Ужасы какие :)
Андрей Панфилов
Дата: 15.01.2010 13:28:32
asmod64,

как-то не выход - у него же еще какие-нибудь диалоги наверняка есть, мне бы что-то однозначное: смог открыть без вопросов - продолжаем, не смог - выходим.
asmod64
Дата: 15.01.2010 13:35:54
Курочка Ряба
asmod64
f.Close();

Ужасы какие :)

копипаст из первой попавшейся ссылки из гугла (думаю общий смысл понятен :))

+ off

МСУ ? :)
Курочка Ряба
Дата: 15.01.2010 13:47:41
asmod64
копипаст из первой попавшейся ссылки из гугла (думаю общий смысл понятен :))

Да понятно, шучу шучу :)


asmod64

+ off
МСУ ? :)

[/spoiler]

+ off
Неее, bured я :)
asmod64
Дата: 15.01.2010 13:54:11
Курочка Ряба,

кстати интересно можно ли без try catch узнать залочен файл или нет
Курочка Ряба
Дата: 15.01.2010 13:59:30
asmod64
Курочка Ряба, кстати интересно можно ли без try catch узнать залочен файл или нет


Насколько я знаю, можно. Но только через UnlockFile Function. То есть, пляшем от обратного.
Ну а дальше уже играем по правилам этой апи функции (нужно читать, анализировать эти "правила"). Есть еще и обратная функция.

P.S. Я бы сделал через try catch и не парился бы :)