2015-11-06 201 views
1

我已經使用了一段時間的電子,並且已經構建了幾個應用程序,但還沒有弄清楚如何去創建桌面圖標和Windows安裝程序(在電子主頁上,它特別指出,使Windows安裝程序「變得輕鬆「)製作應用程序的桌面安裝程序?

對於在典型電子設置中的應用程序,我將如何去製作這樣的windows安裝程序,以及自動安裝桌面圖標(GNOME的.desktop,windows的快捷方式)?

我知道這似乎是一個愚蠢的問題,但我只是不明白少特定指令(如http://electron.atom.io/docs/v0.34.0/tutorial/application-distribution/有點幫助,但太模糊。)

回答

1

我做了一些研究之前,發現,好吧,創建Windows安裝程序並不那麼容易。

  1. 使用grunt-electron-installer來創建Windows安裝程序。請注意,它只會在安裝時顯示gif。沒有交互式對話框。它使用Squirrel.Windows

  2. 使用Update.exe --createShortcut=<comma separated locations> <your exe>來創建快捷方式。可用位置包括DesktopStartMenuStartupAppRoot

    Update.exe將與您的應用出廠時安裝。我發現this article非常有幫助。總之,你需要的是這樣的:

    var app = require('app'); 
    var path = require('path'); 
    var cp = require('child_process'); 
    
    var handleSquirrelEvent = function() { 
        if (process.platform != 'win32') { 
         return false; 
        } 
    
        function executeSquirrelCommand(args, done) { 
         var updateDotExe = path.resolve(path.dirname(process.execPath), 
         '..', 'update.exe'); 
         var child = cp.spawn(updateDotExe, args, { detached: true }); 
         child.on('close', function(code) { 
         done(); 
         }); 
        }; 
    
        function install(done) { 
         var target = path.basename(process.execPath); 
         executeSquirrelCommand(["--createShortcut", target], done); 
        }; 
    
        function uninstall(done) { 
         var target = path.basename(process.execPath); 
         executeSquirrelCommand(["--removeShortcut", target], done); 
        }; 
    
        var squirrelEvent = process.argv[1]; 
        switch (squirrelEvent) { 
         case '--squirrel-install': 
         install(app.quit); 
         return true; 
         case '--squirrel-updated': 
         install(app.quit); 
         return true; 
         case '--squirrel-obsolete': 
         app.quit(); 
         return true; 
         case '--squirrel-uninstall': 
         uninstall(app.quit); 
         return true; 
        } 
    
        return false; 
    }; 
    
    if (handleSquirrelEvent()) { 
        return; 
    } 
    

注意,在電子的新版本,你可以使用auto-updater處理Squirrel.Windows事件,但API是一個有點不同,所以我不知道如何正確使用auto-updater