Share this post

Link to post

Share on other sites

Melba23 2,865

Melba23 2,865

"The source file must be specified using a string literal and can not be a variable, a calculation nor function call. The file must be able to be found during compiling, however variables, calculations and function calls do not get resolved until the script itself is running, long after compiling, making them unsuitable to define the source file."

In your script you are using a variable to define the file - hence it will not work.

M23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort---- Sort arrays on multiple columnsChooseFileFolder---- Single and multiple selections from specified path treeview listingDate_Time_Convert-- Easily convert date/time formats, including the language usedExtMsgBox--------- A highly customisable replacement for MsgBoxGUIExtender-------- Extend and retract multiple sections within a GUIGUIFrame---------- Subdivide GUIs into many adjustable framesGUIListViewEx------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx------ Check/clear parent and child checkboxes in a TreeViewMarquee----------- Scrolling tickertape GUIsNoFocusLines------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify------------- Small notifications on the edge of the displayScrollbars----------Automatically sized scrollbars with a single commandStringSize---------- Automatically size controls to fit textToast-------------- Small GUIs which pop out of the notification area

Similar Content

I get the "Unable to add resources" error related to AppData\Local\AutoIt v3\Aut2Exe when compiling with a large FileInstall of a 1.5GB file. Is there a size limit I need to be aware of? I've also disabled or removed Trend from three different machines and had the same results. I've had issues like this in the past but have compiled after the Aut2Exe folder was excluded in AV. That doesn't seem to be the problem this time around. If I comment out the FileInstall the script compiles successfully.

Hey there, im looking for a way to build something similar to winrar sfx archives.
My idea is to somehow pack files into the exe (maybe fileinstall)
and be able to extract each one to a specific folder if needed.
Now here's the tricky part, i can't think of a way to update only part of the files like i do in winrar.
And it would require some work with command line to be able to somehow get a list of the files packed in, and extract one for example.
Does anyone know of any way to accomplish this? Also, fileinstall that can use variables would be nice.
Best regards.

Hello all. I was playing around with encrypt.au3 and thought it would be neat to build an executable that could extract and decrypt an encrypted file (sort of like an option in PGP if you have ever used that before). I had to think on the issue of installing the file in the exe because you can't use variable path names. The approach I came up with may not be the best - others may have much better ideas - but I thought I would share it nonetheless in case anyone finds it interesting.
;*********************************************
; Example script
; ENCRYPT A FILE INTO A SELF-EXTRACTING EXE
; by: JFish
;
;********************************************
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3> ; will be used for the encryption
#include <File.au3> ; will be used to manipulate au3 file before we compile
#Region ### START Koda GUI section ### Form=C:\Users\RC01712\Documents\Scripts\Encrypt Tool\encrypt_GUI.kxf
$Form1 = GUICreate("Form1", 657, 244, 192, 132)
$sourceInput = GUICtrlCreateInput("", 144, 48, 337, 24)
$sourceBtn = GUICtrlCreateButton("Browse", 40, 48, 89, 25)
$encryptBtn = GUICtrlCreateButton("Encrypt", 224, 128, 145, 33)
$passwordInput = GUICtrlCreateInput("", 144, 80, 337, 24)
$Label1 = GUICtrlCreateLabel("Password", 40, 80, 73, 24)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$decryptBtn = GUICtrlCreateButton("Decrypt", 224, 176, 145, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; var declaration for global scope
dim $sourceFile, $password, $filename, $filenameRoot, $fileExtension, $publicEncFileNameFullPath, $publicEncFileName
; select a source file that we want to encrypt
func _selectFile()
GUICtrlSetData($sourceInput,"")
$filename=""
$sourceFile=FileOpenDialog("Please select a file to encrypt",@ScriptDir,"All (*.*)")
$dirLen=stringlen(@WorkingDir)+1
;grab the file name
$filename=StringTrimLeft($sourceFile,$dirLen)
local $firstDot=stringinstr($filename,".",0,-1)
;grab the file root name without the extension
$filenameRoot=stringtrimright($filename,stringlen($filename)-$firstDot+1)
;grab the file extension
$fileExtension=stringtrimleft($filename,$firstDot-1)
;MsgBox("","",$fileExtension)
GUICtrlSetData($sourceInput,$sourceFile)
EndFunc
func _encrypt()
$password = GUICtrlRead($passwordInput)
if $password="" then
MsgBox("","","please enter a password")
EndIf
; encrypt the file NOTE: method in example of AES 256 is hard coded
$result =_Crypt_EncryptFile($sourceFile,@ScriptDir&"\"&$filenameRoot&"_enc"&$fileExtension,$password,$CALG_AES_256)
; if the encryptions works ...
if $result=True Then
; set the full path name to the file including the new "_enc" showing that it is encrypted
$publicEncFileNameFullPath=@ScriptDir&"\"&$filenameRoot&"_enc"&$fileExtension
; setr the name of the encrypted file without the path
$publicEncFileName=$filenameRoot&"_enc"&$fileExtension
; call the function to create the exe
_createEXE($publicEncFileName,$publicEncFileName)
else
MsgBox("","","encryption error")
EndIf
MsgBox("","Encrypt status",$result)
EndFunc
func _createEXE($publicEncFileNameFullPath,$publicEncFileName)
;*****************************************************************
; This functions writes an au3 file that will get compiled and become our
; 'self extracting' encrypted file and program to decrypt
; The biggest issue is embedding the encrypted file with fileinstall
; b/c it does not take variable path names
;******************************************************************
; craete an INI file with the full path name and file name of the encrypted file
IniWrite(@ScriptDir&"\temp.ini","filedata","filename",$publicEncFileName)
IniWrite(@ScriptDir&"\temp.ini","filedata","filepath",@ScriptDir&"\"&$publicEncFileName)
; stuff our au3 script into a variable called "wrapper"
; NOTE: there are two spots called "REPLACEME" and "REPLACEFILENAME" that will get replaced with ini text
$wrapper='#include <Crypt.au3>'&@crlf& _
'local $readFileName="REPLACEFILENAME"'&@crlf& _
'MsgBox("","",$readFileName)'&@crlf& _
'if FileExists(@ScriptDir&"\"&$readFileName) Then'&@crlf& _
'Else'&@crlf& _
'FileInstall("REPLACEME",@ScriptDir&"\"&$readFileName,1)'&@crlf& _
'EndIf'&@crlf& _
'$passkey=InputBox("Please enter the decryption password","PASSWORD","","*",400,150)' &@crlf& _
'local $newfilename=stringreplace($readFileName,"_enc","_dec")'&@crlf& _
'$firstDot=stringinstr($readFileName,".",0,-1)'&@crlf& _
'$fileExtension=stringtrimleft($readFileName,$firstDot-1)'&@crlf& _
'if _Crypt_DecryptFile($readFileName, @ScriptDir&"\"&$newfilename&$fileExtension, $passkey, $CALG_AES_256) Then'&@crlf& _
'Else'&@crlf& _
' MsgBox("","","invalid password")'&@crlf& _
' Exit'&@crlf& _
'EndIf'
; open a new file for our "standalone" decryption program
$tempFile=fileopen(@ScriptDir&"\standalone.au3",2)
FileWrite($tempFile,$wrapper)
FileClose($tempFile)
;after the au3 file is created read in the filename of the file to install and replace the text
$readFileName=IniRead(@ScriptDir&"\temp.ini","filedata","filename","decryptedfile.txt")
_ReplaceStringInFile (@ScriptDir&"\standalone.au3", "REPLACEFILENAME",$readFileName)
; after the au3 file is created read in the full path of the file to install and replace the text in au3
local $readFilePath=IniRead(@ScriptDir&"\temp.ini","filedata","filepath","default")
_ReplaceStringInFile (@ScriptDir&"\standalone.au3", "REPLACEME",$readFilePath)
;compile the au3 file into an executable using the command line
ShellExecuteWait("Aut2exe.exe"," /in standalone.au3 /out "&$filenameRoot&".exe",@ScriptDir)
;delete the temporary au3 file
FileDelete(@ScriptDir&"\standalone.au3")
EndFunc
;*************************************************
; This function will decrypt the file from the UI
; used to create the encrypted file (make sure you
; select the new name with the _enc first
;************************************************
func _decrypt()
$password = GUICtrlRead($passwordInput)
if $password="" then
MsgBox("","","please enter a password")
EndIf
local $newfilename=stringreplace($filenameRoot,"_enc","_dec")
$result=_Crypt_DecryptFile($sourceFile, @ScriptDir&"\"&$newfilename&$fileExtension, $password, $CALG_AES_256)
MsgBox("","decrypt status",$result)
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
case $sourceBtn
_selectFile()
case $encryptBtn
_encrypt()
case $decryptBtn
_decrypt()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
encrypt2exe.au3

Hi,
I have a very simple line in a complex script.
If Not FileInstall("Thunderbird update.jpg",$ScriptTargetDir,1) Then
SplashOff()
MsgBox(0x10,$UpdateID,"Update failed - could not install Thunderbird update.jpg in " & $ScriptTargetDir)
Exit(0)
EndIf
Every time I try to compile this script I get the message: