Mongodb在便携式C#应用程序中

时间:2012-11-14 18:54:02

标签: c# mongodb

我正在开发一个应该是便携式的应用程序,我正在使用mongodb。

便携式我的意思是我的应用程序有一个包含所有文件夹:dll,exes,mongo文件,mongo数据库。然后使用此文件夹,我可以在任何计算机上运行我的应用程序。

然后我需要知道:

  • 是否有一些库允许我在应用程序开始和结束时运行mongod进程 应用程序结束时的过程?

  • 这样做有好的做法吗?

欢迎提出建议,并提前致谢。

2 个答案:

答案 0 :(得分:11)

根据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配置和运行here

的更多信息

答案 1 :(得分:10)

我需要做同样的事情,我的出发点是Salvador Sarpi的回答。但是,我发现需要在他的例子中添加一些东西。

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

其次,在杀死进程之前,需要在MongoServer对象上调用Shutdown。我有一个问题,它锁定数据库,如果我在杀死进程之前没有调用Shutdown方法,则需要修复它。 See Here for details on repairing

我的最终代码不同,但在本例中,我使用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();