Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Τσεκάρισμα του Registry απο .bat/.wsf ??

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 22-07-2012, 13:30. Υπάρχουν 13 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-07-2012, 22:56 70813

    Τσεκάρισμα του Registry απο .bat/.wsf ??

    (μιλώντας για VB.NET προς το παρόν)

    θέλω να φτιάξω μια φόρμα που θα περιέχει μερικά κουμπιά όπου το καθένα θα τρέχει ένα αρχείο installer για να κάνει install αυτό που γράφει το εκάστοτε κουμπί.

    Το θέμα είναι ότι για να τρέξει η VB.NET φόρμα αυτή, χρειάζεται εγκατεστημένο το .net framework


    Θέλω να δημιουργήσω ένα .bat ή .wsf αρχείο το οποίο!

    1) θα ελέγχει εάν υπάρχει το εξής κλειδί στο registry: 

    1
     
    "HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" /v Install
    Αυτό θα πρέπει να περιέχει την τιμή "1"

    2.α) Αν υπάρχει ΚΑΙ περιέχει την τιμή "1", τότε να τρέχει το πρόγραμμα "FinkPOS.exe" που βρίσκεται στον ίδιο φάκελο

    2.β) Αν είτε δεν υπάρχει, είτε υπάρχει αλλά με άλλη τιμή, τότε θα πρέπει

            2.β.1) να τρέχει το πρόγραμμα "dotnetfx.exe" που βρίσκεται στον υποφάκελο "DotNetFramework" (\DotNetFramework\dotnetfx.exe) 

            2.β.2) αφού περιμένει να τερματιστεί το "dotnetfx.exe", να τρέχει το "langpack.exe" στον ίδιο υποφάκελο (\DotNetFramework\langpack.exe)  

            2.β.3) αφου περιμένει να τερματιστεί και το "langpack.exe", νσ τρέξει το FinkPOS.exe


    Ο κώδικας είναι στο παρακάτω post.

    (Λόγω του ότι έσβησα πράγματα και απο τα 2 post με edit για ενημέρωση)


  •  09-07-2012, 17:32 70816 σε απάντηση της 70813

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Τώρα προσπαθώ να φτιάξω ένα VBScript και έχω γράψει μέχρι τώρα:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <package>
    
       <job id="vbs">
    
          <script language="VBScript">
    
    		Set objShell = WScript.CreateObject("WScript.Shell")
    
    		strPath = Wscript.ScriptFullName
    		Set objFSO = CreateObject("Scripting.FileSystemObject")
    		Set objFile = objFSO.GetFile(strPath)
    		strFolder = objFSO.GetParentFolderName(objFile) 
    		
    		
    		strdotnetfx = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\dotnetfx.exe"""
    		strLangPack = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\langpack.exe"""
    		strInstaller = """" & strFolder & "\FINK-POS\Fink Installation.exe"""
    		
    		Return = objShell.Run(strdotnetfx, 1, true)
    	
    		Return = objShell.Run(strLangPack, 1, true)
    
    		Return = objShell.Run(strInstaller, 1, true)
    	
          </script>
    
       </job>
    
    </package>

    Αυτή τη στιγμή ο κώδικας τρέχει τα 3 αρχεία, ένα-ένα (πρώτα τα .net framework, και μετά το installation) χωρίς όμως να κοιτά στο registry αν είναι φορτωμένο το .net framework.

    Αυτό που θέλω είναι να βλέπει αν υπάρχει το "HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727", και αν ναι, αν το "Install" εκεί μέσα έχει τιμή 1.

    Αν ναι, τότε να τρέχει μόνο το " Fink Installation.exe "

    αλλιώς να τα τρέχει ένα-ένα όπως το έχω γράψει.

    Το θέμα είναι, πως ελέγχουμε το registry σε VBScript???


  •  12-07-2012, 10:50 70833 σε απάντηση της 70816

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Τσέκαρε το παρακάτω link , ίσως σε βοηθήσει.

     

    http://stackoverflow.com/questions/1342245/wshshell-runinstallpath-0-true-not-waiting-to-finish-the-installation-and-co

  •  12-07-2012, 17:26 70837 σε απάντηση της 70813

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Γιατί δεν φτιάχνεις ένα πραγματικό setup project? Ο εντοπισμός του .ΝΕΤ Framework γίνεται αυτόματα.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-07-2012, 12:34 70845 σε απάντηση της 70833

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Rayden:

    Δυστυχώς ο φίλος έχει διαφορετικό πρόβλημα.. (βασικά έχει μεγαλύτερο πρόβλημα από μένα γιατί η εφαρμογή που έχει στο wait κλείνει και τρέχει άλλο αρχείο)

    Εγώ ξέρω ποια αρχεία θέλω να τρέξουν - και δεν ανοίγουν άλλα πράγματα στο μεταξύ... απλώς δεν μπορώ να το κάνω να τρέξουν από υποφάκελο.


     

    Παναγιώτης Καναβός:
     

    Γιατί δεν φτιάχνεις ένα πραγματικό setup project? Ο εντοπισμός του .ΝΕΤ Framework γίνεται αυτόματα.

    Αν ήταν στο χέρι μου, αυτό θα έκανα χωρίς δεύτερη σκέψη. Αλλά μου ανατέθηκε να γράψω μια φόρμα 800x600 που θα έχει την εικόνα της εταιρίας, και από εκεί θα δίνονται επιλογές για το ποια πράγματα θα φορτωθούν, όπως επίσης και support κτλ...

    Από τη φόρμα την ίδια θα μου ήταν πολύ εύκολο να γράψω κώδικα να ελέγχει αν υπάρχει το >net framework, αλλά θα ήταν εντελώς άχρηστο αφού αν δεν υπήρχε, δεν θα έτρεχε και η φόρμα (Vb.Net χρησιμοποιώ). Οπότε πριν τρέξει η φόρμα, πρέπει με άλλο τρόπο να ελέγχω αν υπάρχει ή όχι, και αν δεν υπάρχει να το εγκαθιστώ, και μετά να τρέχω τη φόρμα..


    Κατάφερα να το κάνω να τα τρέχει ένα ενα τελικά.. ήθελε να βάλω το file path μέσα σε  """" quotes"""". (Άλλαξα τον πάνω κώδικα με αυτόν που δουλεύει)

    αλλά να ελέγχω registry από batch ή vbScript είναι μακράν πάνω από τις δυνατότητές μου...


  •  13-07-2012, 13:07 70848 σε απάντηση της 70845

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Υποχρεωτικά θα "πας" native!! Δεν υπάρχει άλλος τρόπος. Πηγές που μπορούν να σε βοηθήσουν είναι οι εξής:

    1. Is .NET Framework installed on this machine???
    2. How to use Visual C++ .NET to detect the .NET Framework versions and service packs that are installed on the computer
    3. XFxDetect - A utility to detect which versions of .Net are installed
    4. Sample code to detect .NET Framework install state and service pack level
    5. Detection keys for .NET Framework 4.0 and Visual Studio 2010

    Δεν είμαι "native" guy, οπότε δε μπορώ να σε βοηθήσω περισσότερο. Η πιο απλή προσέγγιση που θα μπορούσα να σκεφτώ στη δική σου περίπτωση είναι να χρησιμοποιήσεις το utility της πηγής (1) σε κάποιο .bat file. Αν το .NET Framework δεν είναι εγκατεστημένο, θα ήταν λάθος θα αυτοματοποιήσεις της διαδικασία εγκατάστασης, γιατί έτσι κι αλλιώς η εγκατάστασή του προϋποθέτει administrator privileges (όπως, άλλωστε, και όλες οι εγκαταστάσεις).

    Ένα παραθυρικό native utility είναι και αυτό.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  13-07-2012, 13:30 70851 σε απάντηση της 70816

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Υπάρχουν πάρα πολλές πηγές στο internet για το πως διαχειρίζεσαι registry με scripts. Ενδεικτικές είναι οι εξής:

    1. How to read a registry key and its values (VBScript)
    2. Scripts to manage Registry

    Ελπίζω να σε βοηθήσουν.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  13-07-2012, 13:56 70852 σε απάντηση της 70848

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    ευχαριστώ πολύ για την βοήθεια.

    τα κοίταξα όλα, και το "1," φαίνεται το πιο promising. Τα υπόλοιπα είτε απλώς δίνουν πληροφορίες είτε χρειάζονται το .net framework in the first place για να τρέξουν.

    Θα προσπαθήσω λίγο ακόμα μήπως και γίνει τίποτα με το VBScript (.wsf) μιας που ήδη κατάφερα να τρέχουν ένα-ένα, διότι το 1. θέλει C++ και εγώ ξέρω μόνο VB, οπότε θα δυσκολευτώ ιδιαίτερα για να κάνω τις απαραίτητες αλλαγές.. (δλδ να βλέπει αν υπάρχει το .Net 2.0, αν ναι να τρέχει το installer.exe  αλλίως ένα-ένα τα 3 αρχεία)



  •  13-07-2012, 13:58 70853 σε απάντηση της 70851

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Markos:
    Υπάρχουν πάρα πολλές πηγές στο internet για το πως διαχειρίζεσαι registry με scripts. Ενδεικτικές είναι οι εξής:

    1. How to read a registry key and its values (VBScript)
    2. Scripts to manage Registry

    Ελπίζω να σε βοηθήσουν.


    Ναί! αυτά είναι τέλεια!!

    thaaaaaanks :)


  •  13-07-2012, 14:54 70854 σε απάντηση της 70853

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    χαχαχα τα κατάφερα χάρη στο "1." σου μάρκο! Ευχαριστώ.

    Έτσι όπως τον έγραψα τον κώδικα είναι άθλιος βέβαια, αλλά κάνει τη δουλειά του..

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    <package>
    
       <job id="vbs">
    
          <script language="VBScript">
    	  
    		' Constants (taken from WinReg.h)
    		'
    		Const HKEY_CLASSES_ROOT   = &H80000000
    		Const HKEY_CURRENT_USER   = &H80000001
    		Const HKEY_LOCAL_MACHINE  = &H80000002
    		Const HKEY_USERS          = &H80000003
    
    		' Chose computer name, registry tree and key path
    		'
    		strComputer = "." ' Use . for current machine
    		hDefKey = HKEY_LOCAL_MACHINE
    		strKeyPath = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727"
    
    		' Connect to registry provider on target machine with current user
    		'
    		Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
    
    		' Try to enum the subkeys of the key path we've chosen. We can't if the key doesn't exist
    		'
    		If oReg.EnumKey(hDefKey, strKeyPath, arrSubKeys) = 0 Then
    			strValueName = "Install"
    			
    			If oReg.GetDWORDValue(hDefKey, strKeyPath, strValueName, uValue) = 0 Then
    					If uValue = 1 Then
    						Set objShell = WScript.CreateObject("WScript.Shell")
    
    						strPath = Wscript.ScriptFullName
    						Set objFSO = CreateObject("Scripting.FileSystemObject")
    						Set objFile = objFSO.GetFile(strPath)
    						strFolder = objFSO.GetParentFolderName(objFile) 
    		
    						strInstaller = """" & strFolder & "\FINK-POS\Fink Installation.exe"""
    						objShell.Run(strInstaller)
    					
    					Else
    						Set objShell = WScript.CreateObject("WScript.Shell")
    
    						strPath = Wscript.ScriptFullName
    						Set objFSO = CreateObject("Scripting.FileSystemObject")
    						Set objFile = objFSO.GetFile(strPath)
    						strFolder = objFSO.GetParentFolderName(objFile) 
    		
    		
    						strdotnetfx = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\dotnetfx.exe"""
    						strLangPack = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\langpack.exe"""
    						strInstaller = """" & strFolder & "\FINK-POS\Fink Installation.exe"""
    
    						'wscript.echo strdotnetfx 
    		
    						Return = objShell.Run(strdotnetfx, 1, true)
    	
    						Return = objShell.Run(strLangPack, 1, true)
    
    						Return = objShell.Run(strInstaller, 1, true)
    	
    					End If
    			Else
    				Set objShell = WScript.CreateObject("WScript.Shell")
    
    				strPath = Wscript.ScriptFullName
    				Set objFSO = CreateObject("Scripting.FileSystemObject")
    				Set objFile = objFSO.GetFile(strPath)
    				strFolder = objFSO.GetParentFolderName(objFile) 
    		
    		
    				strdotnetfx = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\dotnetfx.exe"""
    				strLangPack = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\langpack.exe"""
    				strInstaller = """" & strFolder & "\FINK-POS\Fink Installation.exe"""
    
    				'wscript.echo strdotnetfx 
    		
    				Return = objShell.Run(strdotnetfx, 1, true)
    	
    				Return = objShell.Run(strLangPack, 1, true)
    
    				Return = objShell.Run(strInstaller, 1, true)
    	
    			End If
    			
    		Else
    			Set objShell = WScript.CreateObject("WScript.Shell")
    
    			strPath = Wscript.ScriptFullName
    			Set objFSO = CreateObject("Scripting.FileSystemObject")
    			Set objFile = objFSO.GetFile(strPath)
    			strFolder = objFSO.GetParentFolderName(objFile) 
    		
    		
    			strdotnetfx = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\dotnetfx.exe"""
    			strLangPack = """" & strFolder & "\FINK-POS\Extras\DotNetFramework\langpack.exe"""
    			strInstaller = """" & strFolder & "\FINK-POS\Fink Installation.exe"""
    
    			'wscript.echo strdotnetfx 
    		
    			Return = objShell.Run(strdotnetfx, 1, true)
    	
    			Return = objShell.Run(strLangPack, 1, true)
    
    			Return = objShell.Run(strInstaller, 1, true)
    	
    			End If
    	
          </script>
    
       </job>
    
    </package>
    /span


  •  13-07-2012, 16:57 70858 σε απάντηση της 70845

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Πρέπει να ξεχωρίσεις την έννοια του install από την παραμετροποίηση και το αρχικό configuration της εφαρμογής. Ο installer άνετα μπορεί να τρέξει μία φορά και να εγκαταστήσει τα binaries και στο τέλος να εκτελέσει μία μικρή εφαρμογή η οποία θα αναλάβει το configuration παραπέρα. Αν τα binaries είναι τόσο μεγάλα ώστε να μην θέλεις ο χρήστης να περιμένει μέχρι το τέλος της αντιγραφής (ουσιαστικά) των αρχείων, μπορείς να σπάσεις το setup σε δύο βήματα: Πρώτα εγκαθιστάς το .ΝΕΤ και εκτελείς το configuration και μετά τρέχεις ένα δεύτερο installer με τα στοιχεία που έχει μαζέψει ο πρώτος.

    Ο,τιδήποτε άλλο θα είναι πολύ εύθραυστο για να μπορέσεις να το χρησιμοποιήσεις σε παραγωγή, πόσο μάλλον να το συντηρήσεις.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-07-2012, 21:57 70871 σε απάντηση της 70858

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Αν ήταν στο χέρι μου, θα χρησιμοποιούσα installer.. αλλά ο άνθρωπος μου είπε ότι θέλει να του κάνω μια φόρμα με κουμπιά πάνω...


  •  15-07-2012, 16:49 70909 σε απάντηση της 70871

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Δεν ξέρω να δείχνω φόρμα  από vbscript γιά να σε βοηθήσω, νομίζω ότι η λύση που σου πρότεινε ο Παναγιώτης είναι η καλύτερη και η πιό απλή σε θέμα συντήρησής της.  Επίσης ότι setup φτιάχνουμε, είτε με clickonce είτε με Setup Project
    δεν είναι σε .NET, οπότε δεν έχεις πρόβλημα. 

    Αν γιά οποιονδήποτε λόγο δεν θέλεις να φτιάξεις setup project και θέλεις να δείξεις φόρμα με κουμπιά, εγώ θα προτιμούσα ίσως μία σελίδα σε HTML. Υπάρχει βέβαια και η λύση με batch file αλλά δεν είναι καλή εικόνα κατά την γνώμη μου να βλέπει  ο χρήστης dos παράθυρα το 2012 (μαρκετινγκ κόλπα) και δεν είναι πάντα εύκολο να συντηρείς batch files.

    Γιά την (προ)ιστορία δες το παρακάτω batch, κάνει σε γενικές γραμμές αυτό που θέλεις, πρόσεξε το spacing και το πως είναι τοποθετημένες οι παρενθέσεις, αλλιώς μπορεί να μην παίξει. Επίσης αν κάνεις αλλαγές βεβαιώσου πρώτα ότι δεν έχεις word wrap
    στο notepad.

    @ECHO OFF
    SETLOCAL ENABLEEXTENSIONS
    TITLE My Utility.
    COLOR 0A

    SET "KEY=HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727"
    SET "NAME=Install"
    SET DATA=

    ECHO Searching for Key "%KEY%"
    ECHO.

    FOR /F "TOKENS=3" %%r IN ( 'REG.EXE QUERY "%KEY%" /v "%NAME%" 2^>NUL' ) DO ( SET DATA=%%r )

    IF DEFINED DATA ( GOTO LBL_EXE ) ELSE ( GOTO LBL_INSTALL )

    :LBL_EXE

    IF %DATA% EQU 0x1 (
     ECHO Executing FinkPOS.exe
     START "" "%~DP0FinkPOS.exe"

     EXIT
    )

    :LBL_INSTALL

    ECHO Installing Framework...
    "%~DP0DotNetFramework Files\dotnetfx.exe"

    ECHO Installing Language Pack...
    "%~DP0DotNetFramework Files\langPack.exe"

    ECHO Installing Main Program...
    "%~DP0FinkPOS.exe"

    PAUSE
    COLOR

     

     

     

     

  •  22-07-2012, 13:30 70955 σε απάντηση της 70909

    Απ: Τσεκάρισμα του Registry απο .bat/.wsf ??

    Ευχαριστώ, όμως δεν ήταν ανάγκη.. έχει ήδη λυθεί το πρόβλημα και πόσταρα την λύση στο προ-προηγούμενο πόστ (http://www.dotnetzone.gr/cs/forums/permalink/70909/70854/ShowThread.aspx#70854)

    Εν τω μεταξύ, μάλλον δεν εξήγησα καλά για το τι χρειαζόμουν.. Υπάρχουν 4-5 Setups/installers (.msi) με διάφορα πράγματα το καθένα μέσα. Και εγώ καλούμουν να φτιάξω μια φόρμα που θα έχει επιλογές για το ποιο ή ποια setups/installers θα φορτώνονταν..

    Η φόρμα όμως είναι σε vb.net, οπότε το ΜΟΝΟ που χρειαζόταν να κάνει το VBScript είναι να βλέπει εάν υπάρχει το .Net Framework 2.0, κι αν όχι να τρέχει το setup του προτού ανοίξει την φόρμα μου που το έχει σαν prerequisite.


    Δεν θα έκανε ποτέ το vbscript εγκατάσταση κάτι.. μόνο τον έλεγχο έτσι ώστε πριν ανοίξει η φόρμα με τις επιλογές του ποιά setups θα εγκατασταθούν, να σιγουρέψουμε ότι υπάρχει το .net framework ώστε να μην crushάρει.


    Anyway, το πρόβλημα λύθηκε :)

    Σας είμαι ευγνώμων! Σε όλους όσους με βοήθησαν.


Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems