Add Windows installer packaging (Setup.exe + portable exe)

PyInstaller onedir/onefile specs, Inno Setup script, and GitHub Actions
workflow to produce JUC500-Setup-win64.exe and portable builds.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
joyharam
2026-07-15 10:26:10 +09:00
commit 8774a4843e
31 changed files with 4677 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
JUC500 — Windows 11 사용 안내
==============================
1) JUC500 케이블을 연결합니다.
2) 공식 j5create Wormhole 소프트웨어가 떠 있으면 종료/제거합니다.
3) Zadig(https://zadig.akeo.ie/) 로 Smart Data Link 장치에 WinUSB 를 설치합니다.
- Options → List All Devices
- Smart Data Link → Interface 5 (Vendor) → WinUSB → Replace Driver
- (권장) Interface 1 (CDC Data) 도 WinUSB
- Interface 2(Mass Storage)·3·4(HID) 는 그대로 둡니다.
4) JUC500.exe 를 실행합니다. 브라우저가 열리면 「연결」을 누릅니다.
5) Mac 쪽에서도 같은 프로그램을 실행한 뒤 연결합니다.
포터블: JUC500-portable.exe 는 설치 없이 실행할 수 있습니다.
(같은 WinUSB/libusb 설정이 필요합니다.)
+63
View File
@@ -0,0 +1,63 @@
# JUC500 Windows 64-bit 설치 (Inno Setup 없이)
# PowerShell -ExecutionPolicy Bypass -File install.ps1
param(
[string]$SourceDir = "",
[string]$InstallDir = "$env:LOCALAPPDATA\Programs\JUC500"
)
$ErrorActionPreference = "Stop"
if (-not $SourceDir) {
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$candidates = @(
(Join-Path $here "..\..\dist\JUC500"),
(Join-Path $here "JUC500"),
(Join-Path (Get-Location) "JUC500"),
(Join-Path (Get-Location) "dist\JUC500"),
$here
)
foreach ($c in $candidates) {
$exe = Join-Path $c "JUC500.exe"
if (Test-Path $exe) { $SourceDir = (Resolve-Path $c).Path; break }
}
}
if (-not $SourceDir -or -not (Test-Path (Join-Path $SourceDir "JUC500.exe"))) {
Write-Host "JUC500.exe 를 찾을 수 없습니다. SourceDir=$SourceDir" -ForegroundColor Red
exit 1
}
Write-Host "==> 설치: $SourceDir -> $InstallDir"
New-Item -ItemType Directory -Force -Path $InstallDir | Out-Null
Get-Process -Name "JUC500","JUC500-portable" -ErrorAction SilentlyContinue |
Stop-Process -Force -ErrorAction SilentlyContinue
Start-Sleep -Milliseconds 400
Copy-Item -Path (Join-Path $SourceDir "*") -Destination $InstallDir -Recurse -Force
$exe = Join-Path $InstallDir "JUC500.exe"
$startMenu = Join-Path $env:APPDATA "Microsoft\Windows\Start Menu\Programs\JUC500"
New-Item -ItemType Directory -Force -Path $startMenu | Out-Null
$wsh = New-Object -ComObject WScript.Shell
$lnk = $wsh.CreateShortcut((Join-Path $startMenu "JUC500.lnk"))
$lnk.TargetPath = $exe
$lnk.WorkingDirectory = $InstallDir
$lnk.Description = "JUC500 Smart Data Link 파일 전송"
$lnk.Save()
$desk = [Environment]::GetFolderPath("Desktop")
$dlnk = $wsh.CreateShortcut((Join-Path $desk "JUC500.lnk"))
$dlnk.TargetPath = $exe
$dlnk.WorkingDirectory = $InstallDir
$dlnk.Save()
Write-Host ""
Write-Host "설치 완료: $InstallDir" -ForegroundColor Green
Write-Host "WinUSB(Zadig) 설정이 필요하면 packaging\windows\README-WIN.txt 를 보세요."
$launch = Read-Host "지금 실행할까요? (Y/N)"
if ($launch -match '^[Yy]') {
Start-Process $exe
}
+52
View File
@@ -0,0 +1,52 @@
; JUC500 Windows 64-bit installer (Inno Setup 6+)
; 빌드: ISCC.exe packaging\windows\juc500.iss
#define MyAppName "JUC500"
#define MyAppVersion "0.1.0"
#define MyAppPublisher "juc500"
#define MyAppURL "https://github.com"
#define MyAppExeName "JUC500.exe"
[Setup]
AppId={{B8D4F0A2-3C5E-4F9B-8D2A-1E6F7B8C9D0E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputDir=..\..\dist-windows
OutputBaseFilename=JUC500-Setup-win64
Compression=lzma
SolidCompression=yes
WizardStyle=modern
ArchitecturesAllowed=x64compatible
ArchitecturesInstallIn64BitMode=x64compatible
PrivilegesRequired=lowest
PrivilegesRequiredOverridesAllowed=dialog
UninstallDisplayIcon={app}\{#MyAppExeName}
CloseApplications=yes
InfoBeforeFile=README-WIN.txt
[Languages]
Name: "korean"; MessagesFile: "compiler:Languages\Korean.isl"
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "..\..\dist\JUC500\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "README-WIN.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "zadig-hint.url"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\Zadig (WinUSB 설정 안내)"; Filename: "{app}\zadig-hint.url"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\README-WIN.txt"; Description: "WinUSB(Zadig) 설정 안내 열기"; Flags: postinstall shellexec skipifsilent unchecked
+5
View File
@@ -0,0 +1,5 @@
@echo off
REM JUC500 — 현재 폴더의 앱을 %LOCALAPPDATA%\Programs\JUC500 에 설치
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1" -SourceDir "%~dp0"
if errorlevel 1 pause
+2
View File
@@ -0,0 +1,2 @@
[InternetShortcut]
URL=https://zadig.akeo.ie/