2012-11-14 11 views
11

Pracuję nad aplikacją, która powinna być przenośna i używam mongodb.Mongodb w przenośnej aplikacji C#

Przez przenośne oznacza, że ​​moja aplikacja ma folder ze wszystkimi: bibliotekami dll, exe, plikami mongo, bazami danych mongo. Następnie za pomocą tego folderu mogę uruchomić moją aplikację na dowolnym komputerze.

Potem trzeba wiedzieć:

  • Czy istnieje jakaś biblioteka, która pozwala mi uruchomić proces mongod kiedy uruchomić aplikację i zakończyć proces gdy kończy aplikację?

  • Czy istnieje dobra praktyka do robienia takich rzeczy?

Porady są mile widziane i z góry dziękujemy.

+0

Czy można dodatkowo zdefiniować "przenośny"? Jakie są twoje wymagania? –

+0

@ csharptest.net Edytuję pytanie przy pomocy przenośnego –

Odpowiedz

9

Zgodnie z instrukcją instalacji MongoDb powinno być całkiem proste.

Mongodb uruchamia się jako aplikacja konsolowa czekająca na połączenia, więc kiedy uruchomi się twoja aplikacja, powinieneś uruchomić mongodb hidden. Zawsze zakładamy, że WSZYSTKIE pliki mongodb są na miejscu z plikami aplikacji, a pliki bazy danych znajdują się we właściwym katalogu).

Po zakończeniu aplikacji należy zabić proces.

Yo należy ustawić prawidłowe ścieżki na tym przykładzie:

//starting the mongod server (when app starts) 
ProcessStartInfo start = new ProcessStartInfo();  
start.FileName = dir + @"\mongod.exe"; 
start.WindowStyle = ProcessWindowStyle.Hidden; 

start.Arguments = "--dbpath d:\test\mongodb\data"; 

Process mongod = Process.Start(start); 

//stopping the mongod server (when app is closing) 
mongod.Kill(); 

można uzyskać więcej informacji o konfiguracji mongod i działa here

8

muszę zrobić to samo i mój punkt wyjścia był Salvador Odpowiedź Sarpi. Ale znalazłem kilka rzeczy, które należało dodać do jego przykładu.

Najpierw należy ustawić wartość UseShellExecute na wartość false dla obiektu ProcessStartInfo. W przeciwnym razie po uruchomieniu procesu może pojawić się ostrzeżenie o bezpieczeństwie zadając użytkownikowi pytanie, czy chce go uruchomić, czy nie. Nie sądzę, że to jest pożądane.

Po drugie, musisz wywołać Shutdown na obiekcie MongoServer, zanim zabijesz proces. Miałem problem z zablokowaniem bazy danych i wymaganiem jej naprawy, jeśli nie zadzwonię do metody Shutdown przed zabiciem procesu. See Here for details on repairing

Mój końcowy kod jest inny, ale dla tego przykładu użyłem kodu Salvadora jako podstawy odniesienia.

//starting the mongod server (when app starts) 
ProcessStartInfo start = new ProcessStartInfo();  
start.FileName = dir + @"\mongod.exe"; 
start.WindowStyle = ProcessWindowStyle.Hidden; 
// set UseShellExecute to false 
start.UseShellExecute = false; 

//@"" prevents need for backslashes 
start.Arguments = @"--dbpath d:\test\mongodb\data"; 

Process mongod = Process.Start(start); 

// Mongo CSharp Driver Code (see Mongo docs) 
MongoClient client = new MongoClient(); 
MongoServer server = client.GetServer(); 
MongoDatabase database = server.GetDatabase("Database_Name_Here"); 

// Doing awesome stuff here ... 

// Shutdown Server when done. 
server.Shutdown(); 

//stopping the mongod server (when app is closing) 
mongod.Kill(); 
+0

* Myślę, że * potrzebujesz podwójnych backslashes na ciągi C#. –

+0

+1 Doskonały! Dzięki. –

Powiązane problemy