Mongodb в переносном приложении С#

Я разрабатываю приложение, которое должно быть портативным, и я использую mongodb.

Портативным я подразумеваю, что у моего приложения есть папка со всеми: dll, exes, mongo файлами, базами данных mongo. Затем с этой папкой я могу запустить приложение на любой машине.

Тогда мне нужно знать:

  • Есть ли библиотека, которая позволяет мне запускать процесс mongod, когда приложение запускается и заканчивается процесс, когда приложение заканчивается?

  • Существует хорошая практика для этого?

Советы приветствуются и благодарим заранее.

Ответ 1

В соответствии с инструкциями по установке MongoDb это должно быть довольно просто.

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

Когда ваше приложение завершается, вы должны убить процесс.

Yo должен установить правильные пути в этом примере:

//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();

Вы можете увидеть дополнительную информацию о конфигурации mongod и запустить здесь

Ответ 2

Мне нужно было сделать то же самое, и отправной точкой был ответ Сальвадора Сарпи. Но я нашел пару вещей, которые нужно было добавить к его примеру.

Сначала вам нужно установить UseShellExecute в false для объекта ProcessStartInfo. В противном случае вы можете получить предупреждение о безопасности при запуске процесса с запросом пользователя, хотите ли они его запустить или нет. Я не думаю, что это желательно.

Во-вторых, вам нужно вызвать Shutdown на объекте MongoServer, прежде чем убить процесс. У меня возникла проблема, когда он заблокировал базу данных и потребовал ее ремонта, если я не вызвал метод Shutdown, прежде чем убить процесс. Подробнее см. здесь о ремонте

Мой последний код отличается, но для этого примера я использовал код Сальвадора в качестве базы для справки.

//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();