我正在开发一个应该是可移植的应用程序,并且我正在使用 mongodb。
便携是指我的应用程序有一个文件夹,其中包含所有:dll、exes、mongo 文件、mongo 数据库。然后使用这个文件夹,我可以在任何机器上运行我的应用程序。
然后我需要知道:
是否有一些库允许我在应用程序启动时运行 mongod 进程并在应用程序结束时结束进程?
是否存在做这些事情的好习惯?
欢迎提供建议并提前致谢。
根据 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 配置和运行的更多信息
我需要做同样的事情,我的出发点是 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();