Member 14035806 Ответов: 1

Ниже C# sharp код не работает


private static void CloseOutlook()
{
    if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
     {
         var app = Marshal.GetActiveObject("Outlook.Application") as Outlook._Application;
         app.Quit();
     }
}
public class FileMove
{
    static void Main()
    {
        string sourceFile = @"C:\Users\IBM_ADMIN\AppData\Local\Microsoft\Outlook\rahul.dinesh@bp.com.ost";
        string destinationFile = @"C:\Users\IBM_ADMIN\AppData\Local\Microsoft\rahul.dinesh@bp.com.ost ";
        System.IO.File.Move(sourceFile, destinationFile);
    }
}   
Outlook error: "Outlook has stopped working"   1. Close Outlook and Skype 2. Move the ost file (C:\Users\uxxxxxxx\AppData\Local\Microsoft\Outlook) to upper folder) 3. Restart Outlook.   



private static void RestartOutlook()
{
    if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
     {
         var app = Marshal.GetActiveObject("Outlook.Application") as Outlook._Application;
         app.Quit();
     }
 
     Thread.Sleep(500);
     Process process = new Process();
     process.StartInfo = new ProcessStartInfo(OutlookFilepath);
     process.Start();
}


Что я уже пробовал:

Пожалуйста, помогите в устранении неполадок с кодом C#

Patrice T

Опишите "не работает".
что он должен делать?

Member 14035806

Предполагается, что он закроет Outlook, переместит файл .ost в другую папку, а затем перезапустит Outlook.

Эти шаги предназначены для автоматизации ошибки при попытке запуска Outlook.

#realJSOP

Причина, по которой он не работает, заключается в том, что ваш код не находится в блоке "предварительно".

Member 14035806

Не могли бы вы помочь мне с решением или предложениями по исправлению кода?

#realJSOP

Научитесь использовать отладчик. "Этот код не работает" - это не вопрос.

David O'Neil

Что происходит, когда вы проходите через него с помощью отладчика?

#realJSOP

Я думаю, что он использует ультра-бесплатную версию Visual Studio (не поставляется с отладчиком).

David O'Neil

Другими словами, он "освободил" свой разум от ограничений, которые сковывают нас, простых смертных! Хорошо для него! :)

Pull420

Где вы на самом деле вызываете методы CloseOutlook() и Restartoutlook(). В статической основной функции я вижу только код для перемещения файла .ost.

Не могли бы вы опубликовать весь код целиком?

1 Ответов

Рейтинг:
1

#realJSOP

Ну, я собираюсь попытаться угадать решение с помощью моего хрустального шара из-за вашего неопределенно сформулированного вопроса.

Ваш метод закрытия Outlook должен выглядеть примерно так:

private static void CloseOutlook()
{
    // get all of the instances of outlook that are currently running
    Process[] outlooks = Process.GetProcessesByName("OUTLOOK");

    // kill each one, one at a time
    foreach (Process outlook in outlooks)
    {

        // kill the process
        int id = outlook.Id;
        outlook.Kill();

        // loop until the process is dead
        Process proc = null;
        do
        {
            proc = Process.GetProcessById(id);
            if (proc != null)
            {
                Thread.Sleep(250);
            }
        } while (proc <> null);
    }
}


Чтобы перезапустить outlook, вам нужно найти исполняемый файл в системе и выполнить его. Найдите соответствующую запись реестра, чтобы найти место установки, и используйте Process класс, чтобы начать его.


Gerry Schmitz

У него нет кодовых вызовов в его "основном" методе (кроме "перемещения"); другие методы являются сиротами ... все это очень печально.