Spaces:
Sleeping
Sleeping
File size: 2,942 Bytes
adbe5cd 45a1acf 66f8fc1 45a1acf b1f0958 66f8fc1 adbe5cd 45a1acf adbe5cd 66f8fc1 45a1acf 52ab4b4 b1f0958 52ab4b4 b1f0958 52ab4b4 b1f0958 0bc4997 b1f0958 52ab4b4 0bc4997 c7ce71d 5a26b8a c7ce71d b1f0958 52ab4b4 b1f0958 adbe5cd b1f0958 329f9c0 45a1acf b1f0958 45a1acf b1f0958 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
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 = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NSIS Installer Creator</title>
</head>
<body>
<h1>Upload Files to Create NSIS Installer</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="bat_file">Upload BAT file:</label>
<input type="file" name="bat_file" required><br><br>
<label for="icon_file">Upload ICO file:</label>
<input type="file" name="icon_file" required><br><br>
<input type="submit" value="Upload and Compile">
</form>
</body>
</html>
"""
@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
# Define the paths to save the uploaded files
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 with the correct paths
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.replace(os.sep, '\\\\')}" # Use double backslashes for NSIS
File "{icon_path.replace(os.sep, '\\\\')}" # Use double backslashes for NSIS
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: <a href='/download/output.exe'>output.exe</a>", 200
except subprocess.CalledProcessError as e:
return f"Compilation failed: {e.stderr}", 400
@app.route('/download/<filename>')
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)
|