2016-03-10 17 views
7

में कई उदाहरणों को कैसे रोकें मुझे नहीं पता कि यह संभव है या नहीं, लेकिन मैं इसे एक मौका भी दे सकता हूं और पूछ सकता हूं। मैं एक इलेक्ट्रॉन ऐप कर रहा हूं और मैं जानना चाहता हूं कि एक समय में एक से अधिक उदाहरण नहीं हो सकते हैं।इलेक्ट्रॉन

मुझे यह gist मिला है लेकिन मुझे यकीन है कि इसका उपयोग करने में गर्म नहीं है। क्या कोई शेयर के कुछ प्रकाश को बेहतर विचार दे सकता है?

var preventMultipleInstances = function(window) { 
    var socket = (process.platform === 'win32') ? '\\\\.\\pipe\\myapp-sock' : path.join(os.tmpdir(), 'myapp.sock'); 
    net.connect({path: socket}, function() { 
     var errorMessage = 'Another instance of ' + pjson.productName + ' is already running. Only one instance of the app can be open at a time.' 
     dialog.showMessageBox(window, {'type': 'error', message: errorMessage, buttons: ['OK']}, function() { 
      window.destroy() 
     }) 
    }).on('error', function (err) { 
     if (process.platform !== 'win32') { 
      // try to unlink older socket if it exists, if it doesn't, 
      // ignore ENOENT errors 
      try { 
       fs.unlinkSync(socket); 
      } catch (e) { 
       if (e.code !== 'ENOENT') { 
        throw e; 
       } 
      } 
     } 
     net.createServer(function (connection) {}).listen(socket);; 
    }); 
} 

उत्तर

13

app मॉड्यूल में makeSingleInstance फ़ंक्शन का उपयोग करें, वहाँ डॉक्स में भी एक उदाहरण है।

+0

वाह, मुझे गूंगा लगता है। मैंने कभी उनके एपीआई में नहीं देखा। मैं यहां से पढ़ रहा था [http://electron.atom.io/docs/v0.36.8/](http://electron.atom.io/docs/v0.36.8/) – Eduard

0

मामले में आपको कोड की आवश्यकता है।

let mainWindow = null; 
//to make singleton instance 
const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => { 
    // Someone tried to run a second instance, we should focus our window. 
    if (mainWindow) { 
     if (mainWindow.isMinimized()) mainWindow.restore() 
     mainWindow.focus() 
    } 
}) 

if (isSecondInstance) { 
    app.quit() 
} 
संबंधित मुद्दे