- NSIS Discussion
- Call::DLL ???
Archive: Call::DLL ???
Inazad
21st May 2009 18:28 UTC
Call::DLL ???
HI there,
I really need help for this section :
Section -BD
Call CreateDatabaseAndBasicData
System
::Call 'Crypto::GeneratePWDSecutityString(v) .EncryptionKey'
System::Call 'Crypto::EncodePWDEx(t,t) t(.BdUser,.EncryptionKey)'
System::Call 'Crypto::EncodePWDEx(t,t) t(.BdPass,.EncryptionKey)'
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "Nom_Database" $BdName
WriteINIStr"$PathIniFile\${IniFile}.INI" "sql" "IP" $BdHost
WriteINIStr"$PathIniFile\${IniFile}.INI" "sql" "g" $BdUser
WriteINIStr"$PathIniFile\${IniFile}.INI" "sql" "e" $BdPass
WriteINIStr"$PathIniFile\${IniFile}.INI" "sql" "f" $EncryptionKey
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "Type" "15632"
>SectionEnd
>
My installer crashes and do not compile with these error log :
Processed 1 file, writing output:
>Adding plug-ins initializing function... Done!
>Error: resolving install function "Crypto::GeneratePWDSecutityString(v) .EncryptionKey" in unnamed install section (1)
>Note: uninstall functions must begin with "un.", and install functions must not
Error- aborting creation process
>
I'm waiting your answers!
Thanks!
Inazad
21st May 2009 19:21 UTC
Call DLL ??
Section -BD
Call CreateDatabaseAndBasicData
File Crypto.dll
System::Call 'Crypto::GeneratePWDSecurityString(v) (v).EncryptionKey'
System::Call 'Crypto::EncodePWDEx(t, t) t(.BdUser, .EncryptionKey).BdUser'
System::Call 'Crypto::EncodePWDEx(t, t) t(.BdPass, .EncryptionKey).BdPass'
SectionEnd
There is the declaration of my dll' functions :
string GeneratePWDSecurityString();
string EncodePWDEx(string, string);
My installers is crashing... Don't know why :( Do I have the good syntax because my code compiles well...
Thanks
DrO
21st May 2009 20:36 UTC
[moderation]
threads merged due to posting in the translation sub-forum as well.
[/moderation]
-daz
kichik
22nd May 2009 10:32 UTC
You have to quote that BdUser and EncryptionKey strings if they are strings. If those are actually variables, then replace them with one of the regular variables because that's all System supports.
Inazad
22nd May 2009 12:43 UTC
Do you have an example ??
Because I'm new in this and I want that section works..
I wrote this line of code and my installer crashes :
System::Call 'Crypto::EncodePWDEx(t, t) t(.BdUser, .EncryptionKey).BdUser'
This line takes my var BdUser and EncryptionKey and encode it. I want the result back into BdUser.
There is a way to check if our DLL is correctly builded ?
Thanks,
Afrow UK
22nd May 2009 14:39 UTC
Like this:
System::Call 'Crypto::EncodePWDEx(t, t) t("$BdUser", "$EncryptionKey").s'
Pop $BdUser
But if that's a .NET dll then you have to call it using the CLR plugin.
For the System plugin you can't just use .BdUser in there for the input/output - you can only use what is specified in the System plugin readme (like r0, R0 etc).
Stu
Inazad
22nd May 2009 14:49 UTC
I wrote my dll in delphi with the Crypto' functions to encrypt data.
Maybe its the code or maybe its the dll... how to know ? :cry:
Afrow UK
22nd May 2009 15:12 UTC
I have edited my post above.
Stu
Inazad
22nd May 2009 15:17 UTC
I have these lines in my code :
Section -BD
Call CreateDatabaseAndBasicData
File "Crypto.dll"
;System::Call 'Crypto::GeneratePWDSecutityString() .s'
StrCpy $EncryptionKey "oKQ2N0mLjxEX8WT4"
;StrCpy $EncryptionKey ""
System::Call 'Crypto::EncodePWDEx(t, t) t("$BdUser", "$EncryptionKey").s'
Pop $BdUser
;System::Call 'Crypto::EncodePWDEx(t.BdPass, t.EncryptionKey) .BdPass's
;System::Call 'Crypto::EncodePWDEx(t.BdUser,t.EncryptionKey).r0'
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "Nom_Database" $BdName
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "IP" $BdHost
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "g" $BdUser
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "e" $BdPass
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "f" $EncryptionKey
WriteINIStr "$PathIniFile\${IniFile}.INI" "sql" "Type" "15632"
SectionEnd
Don't know if its the DLL or the code :mad:
Do you have IM like MSN or Gaim ?
THanks
Afrow UK
22nd May 2009 15:35 UTC
Where is the dll being extracted to?
Stu
Inazad
22nd May 2009 15:49 UTC
it in the same directory of the .nsi file...
THere is a another place to put it ?
Thanks
Afrow UK
22nd May 2009 15:57 UTC
No, I said where are you extracting to on the user's machine? You have no SetOutPath instruction in that code which is why I ask. You may be extracting it to a location that the System plugin doesn't look in.
Stu
Inazad
22nd May 2009 16:10 UTC
There ??
Section -Main
SetOverwrite try
SetShellVarContext all # Pour tous les utilisateurs
StrCpy $PathIniFile "$AppData\${Company}\${ProjectGroup}\Instances\$TxtInstanceValue"
SetOutPath "$INSTDIR" # Pour copier l'exécutable du service
File "Z:\Application\PRD\${IniFile}.exe"
SetOutPath "$INSTDIR\..\" # Pour copier l'exécutable de configuration du service
File "Z:\Application\PRD\${ConfFile}.exe"
SetOutPath $PathIniFile # Pour copier les fichiers ini
File "${IniFile}.INI"
SetOutPath "$AppData\${Company}\"
File /r "..\..\_Commun\Traduction\*.mo"
CreateShortCut "$DESKTOP\${AppName}.lnk" "$INSTDIR\..\${ConfFile}.exe" "-s$TxtInstanceValue"
SectionEnd
Thanks
Inazad
22nd May 2009 16:31 UTC
This is the top of my code, maybe you'll find what you're searching for ???
!define AppName "Blf Agent Unistim"
!define ProjectGroup "BlfAgent"
!define Company "Komutel"
!define IniFile "BlfAgent_Unistim"
!define ConfFile "BlfAgent_Configuration"
!define ServiceName "BlfAgentUnistim"
!define ServiceDescription "Busy Lamp Field Service"
!define ServiceRegSearch "BlfAgent"
# Variables
Var StartMenuGroup
Var PathIniFile
Var InstanceCount
# General Symbol Definitions
!define REGKEY "SOFTWARE\${AppName}"
# MUI Symbol Definitions
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${REGKEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${AppName}"
!define MUI_UNICON "..\Commun\App_Icons\sit-final.ico"
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
!define MUI_LANGDLL_REGISTRY_ROOT HKLM
!define MUI_LANGDLL_REGISTRY_KEY "${REGKEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME InstallerLanguage
# Included files
!include Sections.nsh
!include MUI2.nsh
!include LogicLib.nsh
!include nsDialogs.nsh
;!include ..\Commun\Crypto.nsh
!include ..\Commun\ServiceLib.nsh
!include ..\Commun\frmInstance.nsh
!include ..\Commun\frmUnInstance.nsh
!include ..\Commun\frmMsde.nsh
!include ..\Commun\frmConfigBd.nsh
!include ..\Commun\frmUnistimConfig.nsh
!include ..\Commun\SqlServerScriptBd.nsh
#________Pages d'installation____________________________________________________________________________________________________
!insertmacro MUI_PAGE_WELCOME
Page custom FrmInstanceShow FrmInstanceClose
Page Custom frmMsdeShow frmMsdeClose
Page Custom frmConfigBdShow frmConfigBdClose
!define MUI_PAGE_CUSTOMFUNCTION_PRE JumpThisPage ;Fonction qui me permet de valider si j'exécute la page suivante
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_PRE JumpThisPage ;Fonction qui me permet de valider si j'exécute la page suivante
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
!insertmacro MUI_PAGE_INSTFILES
Page custom frmUnistimConfigServiceShow frmUnistimConfigServiceClose
!insertmacro MUI_PAGE_FINISH
#___________________________________________________________________________________________________________________________
#________Pages de désinstallation__________________________________________________________________________________________________
!insertmacro MUI_UNPAGE_CONFIRM
UninstPage custom un.FrmUnInstanceShow un.FrmUnInstanceClose
!insertmacro MUI_UNPAGE_INSTFILES
#___________________________________________________________________________________________________________________________
# Macro pour les langues
!insertmacro MUI_RESERVEFILE_LANGDLL
!insertmacro MUI_LANGUAGE English
!insertmacro MUI_LANGUAGE French
# Installer attributes
Name "${AppName}"
OutFile "${AppName} Setup.exe"
InstallDir "$PROGRAMFILES\${Company}\${ProjectGroup}\${AppName}\"
CRCCheck on
XPStyle on
ShowInstDetails show
InstallDirRegKey HKLM "${REGKEY}" "Path"
ShowUninstDetails show
RequestExecutionLevel admin
PS: Sorry for the post in double..
Afrow UK
22nd May 2009 19:00 UTC
Assuming SetOutPath "$AppData\${Company}\" was the last SetOutPath instruction then you're extracting Crypto.dll there too.
Stu
Inazad
22nd May 2009 20:38 UTC
So if the Installer Create a Directory into C:\Program Files\ and the company name is Hello, I have to put my dll into :
C:\Program Files\Hello ?
Thanks,
Afrow UK
23rd May 2009 12:54 UTC
Extract to $PLUGINSDIR. That's where the System plugin is so it'll find your dll when it's in the same folder.
Stu
Inazad
23rd May 2009 18:02 UTC
OK I'll test it Monday, at my office.
Can we specify an absolute path like :
File "Z:\Dev\Commun\Crypto.dll" ?
Thanks for your support!
JS
Inazad
25th May 2009 14:49 UTC
I've put the DLL into the $PLUGINSDIR of NSIS.
I don't get error while installing but my DLL do not do his job correctly because I'm getting the string "error" in my INI file ....
There is a way to track or debug a NSIS installer ???
Thanks,
Afrow UK
25th May 2009 16:46 UTC
$PLUGINSDIR has nothing to do with the NSIS plugins folder.
Try this:
SetOutPath $PLUGINSDIR
File Crypto.dll
When you use the NSIS plugin call syntax such as System::Call or nsDialogs::Create NSIS actually includes the plugin DLL and extracts it at run-time to $PLUGINSDIR. If you look in your %TEMP% folder you will find a ns*.tmp folder with the DLL files in it. Having said that, for the System plugin to find the DLL you want to call, it either needs to be in PATH (i.e. $SYSDIR) or in the same folder as System.dll ($PLUGINSDIR). Hopefully that makes sense as I don't think you get it!
Stu
Inazad
25th May 2009 16:49 UTC
I've made an executable in Delphi who do the same as my dll...
Now I just want to call the executable with this following string :
$PathIniFile\${IniFile}.INI
My executable name is : Cypher.exe
Thanks to you.