squeeze multiple files (.dll and .xaml) into an one .exe package

Ask questions about creating Graphical User Interfaces (GUI) in PowerShell and using WinForms controls.
Forum rules
Do not post any licensing information in this forum.

Any code longer than three lines should be added as code using the 'Select Code' dropdown menu or attached as a file.
Locked
User avatar
Patrick9999
Posts: 6
Joined: Wed Aug 23, 2017 8:49 am

squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Patrick9999 »

Hello , how can I squeeze multiple files (.dll and .xaml) into an one .exe package ?

Many thanks
Patrick

jvierra
Posts: 14614
Joined: Tue May 22, 2007 9:57 am
Answers: 2
Has voted: 1 time
Been upvoted: 3 times
Contact:

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by jvierra »

Place all of your files into a project. They should all be included in the EXE.

User avatar
Alexander Riedel
Posts: 7522
Joined: Tue May 29, 2007 4:43 pm
Answers: 1
Been upvoted: 2 times

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Alexander Riedel »

No they won't. Sorry James. :D
Our packager does not place external programs (dlls are in essence programs, just like exe files) and data files into a packaged executable.
There are many reasons for not doing this anymore.
If you want this for deployment purposes you would generally create an MSI file to install your applications and all associated files.
But it would help to know what it is you are trying to accomplish. Your question is a little bit too 'global'....
Alexander Riedel
SAPIEN Technologies, Inc.

jvierra
Posts: 14614
Joined: Tue May 22, 2007 9:57 am
Answers: 2
Has voted: 1 time
Been upvoted: 3 times
Contact:

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by jvierra »

Yes - I missed the DLL. DLLs (and other files) can be distributed with an MSI.

User avatar
Nillth
Posts: 33
Joined: Thu Aug 01, 2013 6:14 pm
Location: Melbourne, Australia
Has voted: 2 times

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Nillth »

Actually, I found a way to do exactly this... :)

I have a little script I use that compresses dll's, files, etc into a self extracting ps1 file...
you point it at all of your required extra files, and it will compress them all to ps1's.
then its just a matter of adding them to the project and calling the invoke on them.
When you compress them, you can specify if you want the file (e.g. dll) to be loaded into memory, import as a powershell module, or export the file to disk before doing something with it.

Code: Select all

#Created: 2020-02-07 17:30:57Z
$EncodedCompressedFile = @'
	Fcs7CoAwDADQveAdgrpWT+AodBSXzn6CLaSNpCl4fHV/r7uihroPB6cxRyINjfESFW3gotA6JGLwLHS2jelzJYIJVtxO635gF+F0f3ARLAXmrCigDPMT9Qsv
'@
Write-Verbose "Loading HelloWorld.ps1"
$DeflatedStream = New-Object IO.Compression.DeflateStream([IO.MemoryStream][Convert]::FromBase64String($EncodedCompressedFile),[IO.Compression.CompressionMode]::Decompress)
$UncompressedFileBytes = New-Object Byte[](95)
$DeflatedStream.Read($UncompressedFileBytes, 0, 95) | Out-Null

#write to file
[io.file]::WriteAllBytes('HelloWorld.ps1', $UncompressedFileBytes)

#run as script block
$SB = [scriptblock]::Create([System.Text.Encoding]::ASCII.GetString($UncompressedFileBytes))
Invoke-Command $SB

Code: Select all

#Created: 2020-02-07 17:28:22Z
$EncodedCompressedFile = @'
	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
'@
Write-Verbose "Loading HelloWorld"
$DeflatedStream = New-Object IO.Compression.DeflateStream([IO.MemoryStream][Convert]::FromBase64String($EncodedCompressedFile),[IO.Compression.CompressionMode]::Decompress)
$UncompressedFileBytes = New-Object Byte[](4608)
$DeflatedStream.Read($UncompressedFileBytes, 0, 4608) | Out-Null
	[io.file]::WriteAllBytes('HelloWorld.exe', $UncompressedFileBytes)

User avatar
Alexander Riedel
Posts: 7522
Joined: Tue May 29, 2007 4:43 pm
Answers: 1
Been upvoted: 2 times

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Alexander Riedel »

Just make sure you don't install your scripts in any protected folder like "Program Files" or below, as the extract will fail without elevation.
Alexander Riedel
SAPIEN Technologies, Inc.

User avatar
Nillth
Posts: 33
Joined: Thu Aug 01, 2013 6:14 pm
Location: Melbourne, Australia
Has voted: 2 times

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Nillth »

Alexander Riedel wrote:
Fri Feb 07, 2020 12:09 am
Just make sure you don't install your scripts in any protected folder like "Program Files" or below, as the extract will fail without elevation.
this is true, however they can be run in memory if you are not extracting to disk...

User avatar
Alexander Riedel
Posts: 7522
Joined: Tue May 29, 2007 4:43 pm
Answers: 1
Been upvoted: 2 times

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Alexander Riedel »

Yeah, that will make it look like malware. I wouldn't run that :D
Can I ask what the reason behind this is? Why are you trying to hide DLLs and other files?
Alexander Riedel
SAPIEN Technologies, Inc.

User avatar
Nillth
Posts: 33
Joined: Thu Aug 01, 2013 6:14 pm
Location: Melbourne, Australia
Has voted: 2 times

Re: squeeze multiple files (.dll and .xaml) into an one .exe package

Post by Nillth »

Not trying to hide the DLL's just trying to have a single, portable exe, that does not need to be installed to run

Locked