15

我正在开发一个应该是可移植的应用程序,并且我正在使用 mongodb。

便携是指我的应用程序有一个文件夹,其中包含所有:dll、exes、mongo 文件、mongo 数据库。然后使用这个文件夹,我可以在任何机器上运行我的应用程序。

然后我需要知道:

  • 是否有一些库允许我在应用程序启动时运行 mongod 进程并在应用程序结束时结束进程?

  • 是否存在做这些事情的好习惯?

欢迎提供建议并提前致谢。

4

2 回答 2

12

根据 MongoDb 安装说明,它应该非常简单。

Mongodb 作为一个等待连接的控制台应用程序启动,因此当您的应用程序启动时,您应该运行 mongodb hidden。我们总是假设所有 mongodb 文件都与您的应用程序文件一起就位,并且数据库文件位于正确的目录中)。

当您的应用程序终止时,您应该终止该进程。

哟应该在这个例子中设置正确的路径:

//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 配置和运行的更多信息

于 2012-11-14T19:49:05.910 回答
11

我需要做同样的事情,我的出发点是 Salvador Sarpi 的回答。但是,我发现有几件事需要添加到他的示例中。

首先,您需要将 ProcessStartInfo 对象的 UseShellExecute 设置为 false。否则,当进程开始询问用户是否要运行它时,您可能会收到安全警告。我不认为这是需要的。

其次,您需要在终止进程之前对 MongoServer 对象调用 Shutdown。如果我在终止进程之前没有调用 Shutdown 方法,我遇到了一个问题,它锁定了数据库并要求修复它。有关修复的详细信息,请参见此处

我的最终代码是不同的,但对于这个示例,我使用 Salvador 的代码作为参考的基础。

//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();
于 2013-10-15T15:23:19.050 回答