Jump to content

Au3 Compile


kamuran731
 Share

Recommended Posts

@kamuran731

32 bit programlar, 64 bitlik sistemde sorunsuz çalışmaktadır. Lakin sistem ile ilgili ayarlar yapacaksa bazı kısıtlamalar ile karşılaşılması muhtemel.
Misal 32 bit program windows\system32 altındaki programlara direk ulaşamaz. Aynı şekilde registrydeki bazı değerleri okuyabilmesine rağmen bazen bu değerleri değiştiremeyebilir. Kısaca bunun gibi bazı sorunlar ara sıra çıkmakta.

Hazırladığım programda, benzer uyumsuzluk sorunları yaşarsam ve tek exe istersem;
1 - Ilk olarak programımı x64 olarak derlerdim.
2 - Sonra x86 olarak derleyeceğim programa bir kontrol ekleyip x64 bitlik programı da fileinstall ile içine gömerdim.

Program x64 bitlik sistem çalıştığında, eklediğim kontrol mekanizmasıyla x64 olarak derlediğim programı çıkartılıp çalıştırıldı.
Karışık mı anlattım acaba? Umarım anlatmak istediğim anlaşılmıştı...

Isterseniz ufak bir örnekte ekleyebilirim. Bu arada heralde processxp de aynı mantıkla çalışıyordu...
Neyse kolay gelsin...

Link to comment
Share on other sites

@MeHMeTBeN

Sen konuyu tam anlayamadın malesef! Derlediğimiz uygulama ya x86, yada x64 olmak zorunda. IA64 vs. zaten kullanmıyoruz.
Autoit script dosyamızı x64 (64 bit) ile derlersek, haliyle x86 (32 bit) windowslarda çalışmayacak.
Autoit script dosyamızı x86 ile derlersek, yaptığı işleme göre, x64 bit sistemlerde sorun çıkartabilir.

Burda en güzel yol programı x86 ve x64 bit olarak derleyip dağıtmak. Ama tex uygulama olmasını istersek, x64 ile derlediğimiz programı x86 ile derlediğimiz programın içine gömeriz. Eğer sistem x64 ise gömdüğümüz programı bir konum (misal temp klasörü olabilir) çıkartıp, onu çalıştırarak kullanabiliriz.
Anlatmak istediğim kısaca buydu. Ben bunun gibi bir ara bir kaç çalışma yapmıştım...

Neyse başarılar dilerim, kolay gelsin...

Link to comment
Share on other sites

[quote name='blue_life' date='05 January 2012 - 20:36 ' timestamp='1325795808' post='1136199']
@kamuran731

32 bit programlar, 64 bitlik sistemde sorunsuz çalışmaktadır. Lakin sistem ile ilgili ayarlar yapacaksa bazı kısıtlamalar ile karşılaşılması muhtemel.
Misal 32 bit program windows\system32 altındaki programlara direk ulaşamaz. Aynı şekilde registrydeki bazı değerleri okuyabilmesine rağmen bazen bu değerleri değiştiremeyebilir. Kısaca bunun gibi bazı sorunlar ara sıra çıkmakta.

Hazırladığım programda, benzer uyumsuzluk sorunları yaşarsam ve tek exe istersem;
1 - Ilk olarak programımı x64 olarak derlerdim.
2 - Sonra x86 olarak derleyeceğim programa bir kontrol ekleyip x64 bitlik programı da fileinstall ile içine gömerdim.

Program x64 bitlik sistem çalıştığında, eklediğim kontrol mekanizmasıyla x64 olarak derlediğim programı çıkartılıp çalıştırıldı.
Karışık mı anlattım acaba? Umarım anlatmak istediğim anlaşılmıştı...

Isterseniz ufak bir örnekte ekleyebilirim. Bu arada heralde processxp de aynı mantıkla çalışıyordu...
Neyse kolay gelsin...
[/quote]


@Blue Life
Hocam Bir örnek eklerseniz çok sevinirim.

Link to comment
Share on other sites

[codebox]FileInstall("x86.exe",@TempDir & "x86.exe") ;32 bit exeyi içine alır
FileInstall("x64.exe",@TempDir & "x64.exe") ;64 bit exeyi içine alır

If @OSArch = "X86" Then ;32 bit ise
ShellExecuteWait(@TempDir & "x86.exe") ;32 bit versiyonu açar

Else ;64 bit ise
ShellExecuteWait(@TempDir & "x64.exe") ;64 bit versiyonu açar
EndIf
Exit[/codebox]

Edited by g.a
Link to comment
Share on other sites

Evet @g.a nın yazdığı gibi yapabilirsin. Tabi ben biraz farkı yapıyorum.
Misal önce x64 olan scripti derlerim.

[codebox]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
;~ #AutoIt3Wrapper_outfile=X86.exe
#AutoIt3Wrapper_outfile=X64.exe
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

MsgBox(64,"@OSArch",@OSArch)
; Kodların ...[/codebox]

Sonra x86 olan programı derler, önceki derlediğim x64 olan programı içine alırım.

[codebox]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=X86.exe
;~ #AutoIt3Wrapper_outfile=X64.exe
;~ #AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

If @OSArch = "X64" Then
FileInstall("X64.exe",@TempDir & "\X64.exe",1) ;Konumu sen belirle
Run(@TempDir & "\X64.exe")
Exit
Endif

MsgBox(64,"@OSArch",@OSArch)
; Kodların ...[/codebox]

Dağıtacağım program haliyle sonra derlerdiğim x86.exe. Bu x86.exe, x64 bitte çalıştığında, fileinstall satırları işleyek ve ilgili x64.exe çalışacaktır...
Tabi dosya konumlarını siz kendinize göre ayarlarsınız. Ben fazla karışık olmasın diye direkt temp klasörüne çıkarttım...

Link to comment
Share on other sites

[b]@blue_life [/b]
kodlarımı yazdım x64 seçerek compile edip exe ye çevirdim

2 nci kutuda verdiğin kodlara kendi kodlarımı ekleyerek x86 seçerek compile edip exe ye çevirdikten sonra
x64 uyumulu ilk exe dosyasını silebilirmiyim?

Link to comment
Share on other sites

@Blue Life
sana ve g.a arekadaşımıza kodlar için teşekkür ederim.
senin verdiğin kodlar g.a arkadaşımızın kodlarından daha stabil bence.
çünkü onun verdiği kodlarda 2 exe dosyasıda tempe çıkartılıyor.

senin verdiğin kodlar kullanıldığında;
eğer sistem 64 bit ise 64 bit için olan exe yi tempe çıkartır.
sistem 32 bit ise hiçbir dosaya tempe çıkartmadan direk kodları uygular.

Edited by kamuran731
Link to comment
Share on other sites

  • 1 ay sonra...

arkadaşlar benim bu konuda anlamadığım birşey var yada ben yanlış algılıyorum şimdi elimizde bir program var x64 ve x86 ayrı ayrı ve bunların boyutu 100 er mb yani derlememizi her iki sisteme göre yapmalı ve exemize gömmeliyiz compile ettik ozaman exemiz 200mb olmuş olucak boyutu hakkında kafam karıştı
bilmem yanlışmı düşünüyorum. :facepalm:

Edited by MeHMeTBeN
Link to comment
Share on other sites

Autoit dosyasına iki ayrı dosyayı gönersen (bu konu onla alakalı) haliyle boyut iki dosyanın toplamı civarı olacaktır.
Yani birinci dosya 100 mb, ikinci dosya da 100 mb ise; 100 + 100 = 200 civarı bir şey olur. Tabi fileinstall ile doya eklerken sıkıştırma da oluyordu.

Link to comment
Share on other sites

  • 2 hafta sonra ...

[indent][left][center][quote name='blue_life' date='07 January 2012 - 18:35 ' timestamp='1325954116' post='1136956']
Evet @g.a nın yazdığı gibi yapabilirsin. Tabi ben biraz farkı yapıyorum.
Misal önce x64 olan scripti derlerim.

[codebox]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
;~ #AutoIt3Wrapper_outfile=X86.exe
#AutoIt3Wrapper_outfile=X64.exe
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

MsgBox(64,"@OSArch",@OSArch)
; Kodların ...[/codebox]

Sonra x86 olan programı derler, önceki derlediğim x64 olan programı içine alırım.

[codebox]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=X86.exe
;~ #AutoIt3Wrapper_outfile=X64.exe
;~ #AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

If @OSArch = "X64" Then
FileInstall("X64.exe",@TempDir & "\X64.exe",1) ;Konumu sen belirle
Run(@TempDir & "\X64.exe")
Exit
Endif

MsgBox(64,"@OSArch",@OSArch)
; Kodların ...[/codebox]

Dağıtacağım program haliyle sonra derlerdiğim x86.exe. Bu x86.exe, x64 bitte çalıştığında, fileinstall satırları işleyek ve ilgili x64.exe çalışacaktır...
Tabi dosya konumlarını siz kendinize göre ayarlarsınız. Ben fazla karışık olmasın diye direkt temp klasörüne çıkarttım...
[/quote]

[color="#8B0000"]blue_life[/color] vermiş olduğun gibi herşey tamam yalnız kurulumun en başında resimdeki gibi gösteriyor onuda gizleyip herşeyin sessiz çalışması için ne yapmalıyız sağolasın..

[img]http://e1202.hizliresim.com/u/x/33j1w.png[/img]

[spoiler][code]#region ;**** Directives created by AutoIt3Wrapper_GUI ****

#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#region
#endregion
#region
#endregion
;~ #AutoIt3Wrapper_outfile=X64.exe
;~ #AutoIt3Wrapper_UseX64=y

If @OSArch = "X64" Then
FileInstall("C:\Users\Falanca\Desktop\NurVecizee.msi", @TempDir & "\NurVecizee.msi", 1)
Run(@TempDir & "\NurVecizee.msi")
Exit
EndIf

MsgBox(64, "@OSArch", @OSArch)
Opt("TrayMenuMode", 1)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 yüklenirken lütfen bekleyiniz...", 30, 4)
Sleep(2000)
Global $Program = _TempFile()
Global $Parametre = "/qn"
FileInstall("NurVecize.msi", $Program)
;~ ;RunWait($Program & " " & $Parametre)
ShellExecuteWait($Program, $Parametre)
FileDelete($Program)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 Başarıyla Yüklendi", 30, 4)
Sleep(2000)
Func _TempFile($s_DirectoryName = @TempDir, $s_FileExtension = ".msi", $s_FilePrefix = "~", $i_RandomLength = 7)
Local $s_TempName
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile
[/code]

[/center][/left][/indent][/spoiler]

Edited by MAKINCI
Link to comment
Share on other sites

[codebox]Opt("TrayMenuMode", 1)
If @OSArch = "X64" Then
FileInstall("C:\Users\Falanca\Desktop\NurVecizee.msi", @TempDir & "\NurVecizee.msi", 1)
Run(@TempDir & "\NurVecizee.msi")
Exit
EndIf

TrayTip("..::Filanca::..", "Nur Vecize 3.0 yüklenirken lütfen bekleyiniz...", 30, 4)
Sleep(2000)
Global $Program = _TempFile()
Global $Parametre = "/qn"
FileInstall("NurVecize.msi", $Program)

;~ ;RunWait($Program & " " & $Parametre)
ShellExecuteWait($Program, $Parametre)
FileDelete($Program)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 Başarıyla Yüklendi", 30, 4)
Sleep(2000)
Func _TempFile($s_DirectoryName = @TempDir, $s_FileExtension = ".msi", $s_FilePrefix = "~", $i_RandomLength = 7)
Local $s_TempName
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile[/codebox]

ReaLyMaN'in dediği gibi "MsgBox(64, "@OSArch", @OSArch)" satırnı silseydin Mesaj Kutusu çıkmazdı :trollface: Ayrıca bir sürü gereksiz "#region - #endregion" vardı onları sildim. Birde hangi kodun neye yaradığını öğrenmeye çalışısan senin çok iyi olur, böyle basit sorular sormazsın :)

Edited by g.a
Link to comment
Share on other sites

ReaLyMaN'in dediği gibi "MsgBox(64, "@OSArch", @OSArch)" satırnı silseydin Mesaj Kutusu çıkmazdı :trollface: Ayrıca bir sürü gereksiz "#region - #endregion" vardı onları sildim. Birde hangi kodun neye yaradığını öğrenmeye çalışısan senin çok iyi olur, böyle basit sorular sormazsın :)

[color="#FF0000"][b] x64'ün kodları doğrumu kardeşim, hala x64'ü kurmuyor x86 tamam[/b][/color]

Edited by MAKINCI
Link to comment
Share on other sites

@MAKINCI

32 bit olan NurVecizee.msi dosyasının ismini X86_NurVecizee.msi olarak değiştir.
64 bit olan NurVecizee.msi dosyasının ismini X64_NurVecizee.msi olarak değiştir.
Iki dosyada script dosyasının yanında olsun ve aşağıdaki kodları dene.
Senin kodlarında bir kaç düzenleme yaptım...
Kolay gelsin...

[codebox]Global $Program = _TempFile()
Global $Parametre = "/qn"

Opt("TrayMenuMode", 1)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 yüklenirken lütfen bekleyiniz...", 30, 4)

If @OSArch = "X86" Then
FileInstall("X86\NurVecizee.msi", $Program, 1)
Else ;X64
FileInstall("X64\NurVecizee.msi", $Program, 1)
EndIf

ShellExecuteWait($Program, $Parametre)
Sleep(1000)
FileDelete($Program)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 Başarıyla Yüklendi", 30, 4)
Sleep(2000)

Func _TempFile($s_DirectoryName = @TempDir, $s_FileExtension = ".msi", $s_FilePrefix = "~", $i_RandomLength = 7)
Local $s_TempName
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile[/codebox]

Link to comment
Share on other sites

[quote name='blue_life' date='01 March 2012 - 22:26 ' timestamp='1330633577' post='1163669']
@MAKINCI

32 bit olan NurVecizee.msi dosyasının ismini X86_NurVecizee.msi olarak değiştir.
64 bit olan NurVecizee.msi dosyasının ismini X64_NurVecizee.msi olarak değiştir.
Iki dosyada script dosyasının yanında olsun ve aşağıdaki kodları dene.
Senin kodlarında bir kaç düzenleme yaptım...
Kolay gelsin...

[codebox]Global $Program = _TempFile()
Global $Parametre = "/qn"

Opt("TrayMenuMode", 1)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 yüklenirken lütfen bekleyiniz...", 30, 4)

If @OSArch = "X86" Then
FileInstall("X86\NurVecizee.msi", $Program, 1)
Else ;X64
FileInstall("X64\NurVecizee.msi", $Program, 1)
EndIf

ShellExecuteWait($Program, $Parametre)
Sleep(1000)
FileDelete($Program)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 Başarıyla Yüklendi", 30, 4)
Sleep(2000)

Func _TempFile($s_DirectoryName = @TempDir, $s_FileExtension = ".msi", $s_FilePrefix = "~", $i_RandomLength = 7)
Local $s_TempName
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile[/codebox]
[/quote]

[b]hocam bu kodlarla şu hatayı alıyorum sorun nerde anlamadım herşey sizin dediğiniz gibi...[/b]

[img]http://d1203.hizliresim.com/v/6/397wn.png[/img]

Edited by MAKINCI
Link to comment
Share on other sites

error adding file kodlarını compile ederken büyük bir ihtimal ya ismi kodlarda yazanla aynı değil yada x86\NurVecizee.msi dosyası script dosyasının yanında değil X86\NurVecizee.msi ve X64\NurVecizee.msi isimlerini NurVecizeex64.msi NurVecizeex86.msi yapıp script dosyasının yanına koy ve birde oşekilde compile et bakalım nasıl olucak.

Link to comment
Share on other sites

@MAKINCI

Kusura bakma, fileinstall satırlarındaki dosya konumları hatatalıymış. Aşağıdaki örnek için bir önceki mesaj aynen geçerlidir.

[quote name='blue_life' date='01 March 2012 - 22:26 ' timestamp='1330633577' post='1163669']
32 bit olan NurVecizee.msi dosyasının ismini X86_NurVecizee.msi olarak değiştir.
64 bit olan NurVecizee.msi dosyasının ismini X64_NurVecizee.msi olarak değiştir.
Iki dosyada script dosyasının yanında olsun ve aşağıdaki kodları dene.
Kolay gelsin...[/quote]

[codebox]Global $Program = _TempFile()
Global $Parametre = "/qn"

Opt("TrayMenuMode", 1)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 yüklenirken lütfen bekleyiniz...", 30, 4)

If @OSArch = "X86" Then
FileInstall("X86_NurVecizee.msi", $Program, 1)
Else ;X64
FileInstall("X64_NurVecizee.msi", $Program, 1)
EndIf

ShellExecuteWait($Program, $Parametre)
Sleep(1000)
FileDelete($Program)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 Başarıyla Yüklendi", 30, 4)
Sleep(2000)

Func _TempFile($s_DirectoryName = @TempDir, $s_FileExtension = ".msi", $s_FilePrefix = "~", $i_RandomLength = 7)
Local $s_TempName
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile[/codebox]

Link to comment
Share on other sites

[quote name='blue_life' date='07 March 2012 - 11:12 ' timestamp='1331111529' post='1166103']
@MAKINCI

Kusura bakma, fileinstall satırlarındaki dosya konumları hatatalıymış. Aşağıdaki örnek için bir önceki mesaj aynen geçerlidir.



[codebox]Global $Program = _TempFile()
Global $Parametre = "/qn"

Opt("TrayMenuMode", 1)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 yüklenirken lütfen bekleyiniz...", 30, 4)

If @OSArch = "X86" Then
FileInstall("X86_NurVecizee.msi", $Program, 1)
Else ;X64
FileInstall("X64_NurVecizee.msi", $Program, 1)
EndIf

ShellExecuteWait($Program, $Parametre)
Sleep(1000)
FileDelete($Program)
TrayTip("..::Filanca::..", "Nur Vecize 3.0 Başarıyla Yüklendi", 30, 4)
Sleep(2000)

Func _TempFile($s_DirectoryName = @TempDir, $s_FileExtension = ".msi", $s_FilePrefix = "~", $i_RandomLength = 7)
Local $s_TempName
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile[/codebox]
[/quote]

Fonksiyondaki $s_FilePrefix = "~", $i_RandomLength = 7 ifadeleri gerekli mi? Olmazsa olmaz mı?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...