Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

nssm と Inno Setup で node.js の Web アプリをサービス登録するインストーラーを作成してみた

概要

本記事は Winser と Inno Setup で node.js の Web アプリをサービス登録するインストーラーを作成してみた の nssm を用いたバージョンとなります。

グローバルに npm が入っていない環境で npm を利用して winser からサービスを登録するのか上手く行かなかったため、nssm を直接用いてサービス登録する方法に変更しました。

nssm とは

任意のアプリケーションをサービスとして実行できるツール
http://nssm.cc

Inno Setup とは

Windows用のインストールシステム(公式HP: http://www.jrsoftware.org/isinfo.php

環境

  • Windows 10
  • node.js v8.9.4
  • npm 5.6.0

準備

nssm ダウンロード方法

http://nssm.cc/download からダウンロードできます。

Inno Setup インストール方法

Chocolatey を使うと簡単にインストールできます。
Chocolatey のインストール方法はこちら

Powershell(管理者実行)
cinst -y innosetup

Chocolatey を用いない場合には http://www.jrsoftware.org/isdl.php から "Stable Release" の innosetup-x.y.z.exe をダウンロードしてインストールしてください。

nssm 設定

  1. サービス登録用バッチファイルの作成

    setting.bat にサービス登録用コマンドを記入します
    <ServiceName> のところには登録したいサービス名を入力します

    setting.bat
    @echo off
    
    cd %~dp0
    nssm.exe install <ServiceName> "%~dp0\node.exe" "%~dp0\index.js"
    net start <ServiceName>
    
    exit /B 0
    
  2. サービス削除用バッチファイルの作成

    uninstall_setting.bat にサービス登録用コマンドを記入します
    <ServiceName> のところには削除したいサービス名を入力します

    uninstall_setting.bat
    @echo off
    
    cd %~dp0
    net stop <ServiceName>
    nssm.exe remove <ServiceName> confirm
    
    exit /B 0
    

Inno Setup 設定

  1. Inno Setup Compiler を起動します
  2. "New file" の "Create a new script file using the Script Wizard" を選択して [OK] をクリックします
  3. [Next >] をクリックします
  4. アプリケーション情報を入力して [Next >] をクリックします

    名称 説明 備考
    Application name アプリケーション名 Test_app としました
    Application version アプリケーションのバージョン 1.0.0 としました
    Application publisher アプリケーションの作成者 Test Company, Inc. としました
    Application website アプリケーションウェブサイト http://www.example.com/ としました
  5. アプリケーションのフォルダ情報を入力して [Next >] をクリックします

    名称 説明 備考
    Application destination base folder インストール先フォルダ Program Files ではないフォルダにインストールしたかったので (Custom) を選択してフォルダの絶対パスを指定しました
    Application folder name アプリケーションフォルダの名前の指定 Test_app としました
    Allow user to change the application folder インストール先フォルダをユーザーが変更できるようにするか 固定にしたかったのでチェックを外しました
  6. アプリケーションファイル情報を入力して [Next >] をクリックします

    名称 説明 備考
    The application doesn't have a main execute file メインの実行ファイルの有無 今回はメインの実行ファイルがないのでチェックをつけました
    Other application files インストールさせたいファイル(フォルダ) C:\Test_source としました
  7. アプリケーションのショートカット情報を入力して [Next >] をクリックします

    名称 説明 備考
    Allow user to change the Start Menu folder name スタートメニューのフォルダ名をユーザーが変更できるようにするか 固定にしたかったのでチェックを外しました
  8. アプリケーションのドキュメント情報を入力して [Next >] をクリックします

    • 今回はドキュメント情報はなくて良いので空欄のままとしました
  9. セットアップの言語設定を入力して [Next >] をクリックします

    • 今回は日本語のみの設定なので "Japanese" のみにチェックをつけました
  10. 作成する exe ファイルの設定を入力して [Next >] をクリックします

    名称 説明 備考
    Custom compiler output folder 作成する exe ファイルの出力フォルダ C:\Test_exe としました
    Compiler output base file name 作成する exe ファイル名 Test_app としました
  11. チェックをつけたまま [Next >] をクリックします

    • アプリ名などが #define によって定義されます
  12. [Finish] をクリックしてウィザードを終了させます

  13. すぐにコンパイルするか聞かれるので [いいえ] をクリックします

  14. ここからは表示されている iss ファイルに追記をしていきます。[Run] セクションを追加してインストール後に setting.bat を実行するようにします

    {app} はインストール先のフォルダを示しています。

    [Run]
    Filename: "{app}\setting.bat"; Description: "サービスに登録する"; WorkingDir: "{app}"; Flags: postinstall shellexec skipifsilent
    
  15. [UninstallDelete] セクションを追加してアンインストール時に削除するフォルダを指定します

    アンインストール時にはインストール時に存在するファイルのみ削除されるため、インストール後にアプリ上から追加されるファイルに関してはここで削除の設定を入れておきます。

    [UninstallDelete]
    Type: filesandordirs; Name: "{app}\log";
    
  16. [UninstallRun] セクションを追加してアンインストール時に uninstall_setting.bat を実行するようにします

    [UninstallRun]
    Filename: "{app}\uninstall_setting.bat";
    
  17. メニューバーの "Build" > "Complie" をクリックすると exe ファイルが生成されます

iss ファイルは以下のようになります。
InnoSetup.PNG

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?