I'm trying to use your program on a PC running Debian GNU/Linux version 10, codename "buster". I have Wine to run Win32 applications, such as FamiTracker, OpenMPT, FCEUX debugger, and BGB, and Mono to run .NET applications, such as Mesen and Mesen-S. However, its MSI package appears to require the .NET Framework, and Wine doesn't appear to be able to use the system installation of Mono.
Code:
$ wine --version
wine-4.0 (Debian 4.0-2)
$ mono --version
Mono JIT compiler version 5.18.0.240 (Debian 5.18.0.240+dfsg-3 Wed Apr 17 16:37:36 UTC 2019)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
Interpreter: yes
LLVM: supported, not enabled.
Suspend: preemptive
GC: sgen (concurrent by default)
$ wine msiexec /i ~/Downloads/FamiStudio1.0.0.msi
This setup requires the .NET Framework version v4.6.1.
Please install the .NET Framework and run this setup
again. The .NET Framework can be obtained from the
web. Would you like to do this now?
[ Yes ] [ No ]
I can run .NET Framework executables using Mono, but only if they're bare executables, not packed inside an MSI file. Google Search for
mono msi file brought me the question
"How does one use Mono if you have to install an MSI file first?" on Stack Overflow. Its answer recommends extracting the executables from the MSI file using 7-Zip:
Code:
$ mkdir ~/Downloads/famistudio
$ cd ~/Downloads/famistudio
$ 7z x ../FamiStudio1.0.0.msi
$ ls
'[5]SummaryInformation' '!File'
'!AdminExecuteSequence' '!Icon'
'!AdminUISequence' Icon._853F67D554F05449430E7E.exe
'!AdvtExecuteSequence' Icon._C68722421FCC688B85FAE8.exe
'!Binary' '!InstallExecuteSequence'
Binary.DefBannerBitmap '!InstallUISequence'
Binary.MSVBDPCADLL '!Media'
Binary.NewFldrBtn '!ModuleSignature'
Binary.UpFldrBtn '!MsiAssembly'
Binary.VSDNETCFG '!MsiAssemblyName'
_CFB98006EDAD3916AB3649C68FE29E89 '!ProgId'
'!_Columns' '!Property'
'!Component' '!RadioButton'
'!Control' '!Shortcut'
'!ControlCondition' '!_StringData'
'!ControlEvent' '!_StringPool'
'!CustomAction' '!_Tables'
'!Dialog' '!TextStyle'
'!Directory' '!UIText'
'!EventMapping' '!Upgrade'
'!Extension' '!_Validation'
'!Feature' '!Verb'
'!FeatureComponents' '!_VsdLaunchCondition'
These opaque filenames don't help me understand the structure. I'll assume that one of the largest ones actually contains the executable:
Code:
$ ls -lS | head
-rw-r--r-- 1 pino pino 663000 Aug 4 08:36 _CFB98006EDAD3916AB3649C68FE29E89
-rw-r--r-- 1 pino pino 308480 Aug 4 08:36 Binary.MSVBDPCADLL
-rw-r--r-- 1 pino pino 105056 Aug 4 08:36 Binary.DefBannerBitmap
-rw-r--r-- 1 pino pino 45154 Aug 4 08:36 !_StringData
-rw-r--r-- 1 pino pino 11236 Aug 4 08:36 Binary.VSDNETCFG
-rw-r--r-- 1 pino pino 10248 Aug 4 08:36 !_Validation
-rw-r--r-- 1 pino pino 5356 Aug 4 08:36 !Control
-rw-r--r-- 1 pino pino 4952 Aug 4 08:36 !_StringPool
-rw-r--r-- 1 pino pino 4150 Aug 4 08:36 Icon._853F67D554F05449430E7E.exe
$ file _CFB98006EDAD3916AB3649C68FE29E89
_CFB98006EDAD3916AB3649C68FE29E89: Microsoft Cabinet archive data, 663000 bytes, 12 files, at 0x54 "_01299B527B5AC73A8726542470FB71CC", iFolder 0x1 "_05F2D34326FD7BA9900BC09042467735", 6 cffolders, number 1, 9 datablocks, 0x1 compression
$ 7z l _CFB98006EDAD3916AB3649C68FE29E89
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2018-08-24 05:58:52 ..... 274944 _01299B527B5AC73A8726542470FB71CC
2018-08-24 05:59:14 ..... 92160 _05F2D34326FD7BA9900BC09042467735
2019-08-04 08:50:44 ..... 1113 _0E8D5BE6867142BA88C824E848A44DF4
2019-08-04 08:50:44 ..... 7335 _2170D06C2813442491EACBF5C1BB3201
2019-08-04 08:50:44 ..... 6764 _29A022B6EE314228BD07A95FFF02AAC0
2018-08-24 05:59:00 ..... 148480 _5616854BA49B9742429146EEED13A3C6
2019-08-04 08:50:44 ..... 7316 _6802629516074A218C72D553A3E74FED
2019-08-04 10:37:42 ..... 388096 _9A90968E7DE1ED1BDE8FAAF5D985BF31
2019-08-04 08:50:44 ..... 24576 _A9AC56D0A4C619C24D2B64784FFAB7DC
2018-08-24 05:59:04 ..... 495616 _ADD4BCB9277D5C9E405EEAAF846FA4BE
2018-08-24 05:59:08 ..... 283136 _DAED96EE0502954FBFAEFAFC2C7DF771
2019-08-04 08:50:44 ..... 191 _F91C73742125D3078B90EA1D78DD9BA3
------------------- ----- ------------ ------------ ------------------------
Oh goody, more opaque filenames. Now I'm stuck.
I'd try dual booting into Windows, but this computer never came with an activated copy of Windows. I bought it used off-lease on eBay, and when it arrived, the included copy of Windows 10 could not connect to the volume activation server, presumably because said server wa on a corporate LAN. I looked at the bottom of the case to activate it but discovered that the Certificate of Authenticity containing the product key had been torn off. So on this computer, Debian is all I have. Even on another computer to which I have access, Windows 10 starts up and shuts down so slowly that dual-booting is an ordeal of several minutes. (If you want, I can time it for you.)
How do I go about extracting the executable from the MSI so that I can run it in Mono? Incidentally, I had the same problem of needing .NET Framework in the installer when trying to install Authy for Windows on Linux in order to set up 2-factor authentication on Twitch in order to get my Twitch stream key for use with OBS, and the end result was that I gave up trying to stream on Twitch.
Or how hard would it be to distribute a "portable application" version, which is just the executable in a zipfile? That way I could unzip it and run it using Mono.