我正在开发一个应该是便携式的应用程序,我正在使用mongodb。
便携式我的意思是我的应用程序有一个包含所有文件夹:dll,exes,mongo文件,mongo数据库。然后使用此文件夹,我可以在任何计算机上运行我的应用程序。
然后我需要知道:
是否有一些库允许我在应用程序开始和结束时运行mongod进程 应用程序结束时的过程?
这样做有好的做法吗?
欢迎提出建议,并提前致谢。
答案 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();