Uruchamianie exe/bat z poziomu C# a wyjątki

0

Witam!

Jestem dość zielony z programowania, ale kombinuję jak mogę :)
Przeglądając MSDN znalazłem fragment kodu, który by mi się przydał. Programik ma siedzieć sobie w tle i badać co jakiś czas czy istnieje plik x na partycji y.

Wszystko zdaje się być jak należy (z przykładu na msdn - podobny kodzik miał być elementem nieco większego programu):

using System.Diagnostics;
using System.ComponentModel;

namespace zgf_tc_starter
{
    class MyProcess
    {
            const int ERROR_FILE_NOT_FOUND = 2;
            const int ERROR_ACCESS_DENIED = 5;

            void Tc()
            {
                Process myProcess = new Process();
                try
                {
                    myProcess.StartInfo.FileName = @"n:\mount.bat";
                    //myProcess.StartInfo.CreateNoWindow = false;
                    myProcess.Start();
                }

                catch (Win32Exception e)
                {
                    if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND)
                    {
                        Console.WriteLine(e.Message);
                    }
                    else if (e.NativeErrorCode == ERROR_ACCESS_DENIED)
                    {
                        Console.WriteLine(e.Message + " permission denied");
                    }
                    //Console.WriteLine(e);

                }
            }
        static void Main(string[] args)
        {
            Console.WriteLine("\n Testujemy, czy zechce odczytac :) Wersja 0.0.2.9\n\n");

            MyProcess myProcess = new MyProcess();
            myProcess.Tc();

            Console.ReadKey();
        }
    }
}

Niestety, kiedy w czytniku kart nie znajduje się nośnik (mimo braku nośnika, litera dysku w oknie Mój komputer jest przydzielona!), system Windows wyświetla komunikat, że w urządzeniu nie znajduje się dysk + trzy przyciski Anuluj, Próbuj ponownie, Kontynuuj - http://www.kokosoftware.pl/wrzuc/images/img_7892593.jpg
Oczywiście, nie chcę, aby ten komunikat się pojawiał, tylko aby program działając w tle "złapał" to wydarzenie po cichu i zareagował odpowiednio.

Przejrzałem chyba wszystkie możliwe błędy Win32 i nie znalazłem żadnego, który by na to zaradził.

Może podejść do tego problemu zupełnie inaczej? Jak inaczej sprawdzać, czy w napędzie N: znajduje się nośnik z danym plikiem?

Z góry dziękuję za podpowiedzi!

ps - oczywiście, nie żądam od Was gotowca, ino jakichś podpowiedzi i np. linków do dokumentacji w msdn, czy innych tutoriali :)

0

Nie wiem, co Ty wykombinowałeś...

Nie mógłbyś sobie w jakimś drugim wątku, timerze czy czymś takim sprawdzać cyklicznie, czy istnieje plik i w zależności od tego zareagować?

if(File.Exists(@"N:\mount.bat"))
    Console.WriteLine("Plik istnieje!");
0

a nie możesz najpierw sprawdzić czy istnieje nośnik w napędzie chyba była do tego jakaś funkcja

[Added]

Może ten wątek na MSDN'ie Ci coś pomoże:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/1ecb74cd-d193-40f5-9aa3-47a3c9adb4ea/

0

Można pobrać listę partycji, np.

Environment.GetLogicalDrives();
DriveInfo.GetDrives();

1 użytkowników online, w tym zalogowanych: 0, gości: 1