from flask import Flask, request, send_file, render_template_string import os import subprocess app = Flask(__name__) UPLOAD_FOLDER = 'uploads' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER # HTML template for the index page HTML_TEMPLATE = """ NSIS Installer Creator

Upload Files to Create NSIS Installer





""" @app.route('/') def index(): return render_template_string(HTML_TEMPLATE) @app.route('/upload', methods=['POST']) def upload_files(): if 'bat_file' not in request.files or 'icon_file' not in request.files: return "No file part", 400 bat_file = request.files['bat_file'] icon_file = request.files['icon_file'] if bat_file.filename == '' or icon_file.filename == '': return "No selected file", 400 bat_path = os.path.join(app.config['UPLOAD_FOLDER'], bat_file.filename) icon_path = os.path.join(app.config['UPLOAD_FOLDER'], icon_file.filename) # Save the uploaded files bat_file.save(bat_path) icon_file.save(icon_path) # Construct the NSIS script nsi_script = f""" !include nsDialogs.nsh !include LogicLib.nsh Outfile "output.exe" InstallDir "$PROGRAMFILES\\YourApp" Name "Your App" Caption "Your App Installer" VIProductVersion "1.0.0" RequestExecutionLevel admin Page instfiles Section "Install" SetOutPath "$INSTDIR" File "{bat_path}" File "{icon_path}" SectionEnd """ nsi_path = os.path.join(app.config['UPLOAD_FOLDER'], 'installer.nsi') with open(nsi_path, 'w') as nsi_file: nsi_file.write(nsi_script) # Compile the NSIS script try: result = subprocess.run(['makensis', nsi_path], check=True, capture_output=True, text=True) return f"Compilation successful! Download here: output.exe", 200 except subprocess.CalledProcessError as e: return f"Compilation failed: {e.stderr}", 400 @app.route('/download/') def download_file(filename): return send_file(os.path.join(app.config['UPLOAD_FOLDER'], filename), as_attachment=True) if __name__ == '__main__': if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) app.run(host='0.0.0.0', port=7860)