La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.

Presentazioni simili


Presentazione sul tema: "PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie."— Transcript della presentazione:

1 PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie Un mondo di componenti

2 Componenti, gli unknown L’architettura di Windows è sostanzialmente differente da quella Unix Nel tempo i componenti binari, piuttosto che gli eseguibili, sono diventati la vera unità di esecuzione di Windows Molte delle caratteristiche della piattaforma Windows sono legate a questa sua struttura

3 Componenti binari La tecnologia chiave per l’architettura a componenti di Windows è COM I componenti COM sono componenti binari: un programma li può caricare ed eseguire anche se sviluppati separatamente e con linguaggi di programmazione differenti Il sistema si basa su convenzioni di compilazione e il meccanismo del caricamento dinamico delle DLL

4 COM Live Demo Ma cosa vuol dire esattamente che non ci sono applicazioni ma componenti? Quali applicazioni sono in realtà componenti? La Object Shell è stata sviluppata per poter sperimentare con i componenti COM interattivamente e scrivere più facilmente script

5 Come funziona? Il registro di sistema fu introdotto in Windows 3.0 per supportare COM Il ruolo fondamentale che esso gioca è quello di tenere traccia dei componenti installati nel sistema I GUID non sono altro che chiavi per navigare il registro

6 Windows Scripting Host Molti (quasi tutti) credono che gli script in Windows siano ancora i file batch NO! La vera programmazione di sistema è basata su Active Scripting e Windows Scripting Host Tutti i task di sistema sono esposti mediante componenti COM Informazioni e documentazione:

7 L’architettura

8 Javascript Sebbene WSH ammette vari linguaggi JScript è indubbiamente un buon linguaggio: –È l’implementazione Microsoft di ECMA-262 –È utilizzato anche nelle pagine Web (e XSLT) –È un linguaggio molto ben disegnato Alcune applicazioni (come ad esempio Office) usano VBScript, ma è facile convertire un linguaggio nell’altro

9 Javascript in 2 slides function apply(arr, f) { var ret = new Array(arr.length); var i; for (i = 0; i < arr.length; i++) ret[i] = f(arr[i]); return ret; } function printArray(arr) { var i, s = "{ "; for (i = 0; i < arr.length; i++) { if (i != 0) s += ", "; s += arr[i]; } s += " }"; WScript.Echo(s); } function inc(i) { return i + 1; } var a = new Array(1, 2, 3, 4, 5); printArray(a); printArray(apply(a, inc));

10 ...la seconda function Persona(n, c) { this.Nome = n; this[“Cognome”] = c; } var p = new Persona('Antonio', 'Cisternino'); function PersonaEq(o, n, c) { o.Nome = n; o.Cognome = c; } p = PersonaEq({}, 'Antonio', 'Cisternino'); function Stack() { this.sp = 0; this.Push = function (v) { this[this.sp++] = v; } this.Pop = function () { if (this.sp == 0) throw "Empty Stack!"; return this[--this.sp]; } this.IsEmpty = function () { return this.sp == 0; }} try { var s = new Stack(); s.Push(1); s.Push("Ciao"); WScript.Echo(s.Pop()); WScript.Echo(s.Pop()); // Errore! s.Push(2); // Non verra` eseguito! } catch (e) { WScript.Echo("Errore: " + e);}

11 FileSystemObject var fso = WScript.CreateObject("Scripting.FileSystemObject"); function ProcessDir(d, p) { var e; for (e = new Enumerator(d.Files); !e.atEnd(); e.moveNext()) { var f = e.item(); if (f.Path.match(p)) WScript.Echo(f); } for (e = new Enumerator(d.SubFolders); !e.atEnd(); e.moveNext()) { var cd = e.item(); ProcessDir(cd, p);}} try { if (WScript.Arguments.length != 2) { WScript.Echo("Usage: find dir pattern"); WScript.Quit(0); } d = fso.GetFolder(WScript.Arguments.Item(0)); p = new RegExp(WScript.Arguments.Item(1)); ProcessDir(d, p); } catch (e) { WScript.Echo(e); }

12 System Info... var wshnw = WScript.CreateObject("WScript.Network"); var wshsh = WScript.CreateObject("WScript.Shell"); var out = "Informazioni sul programma (WScript):\n\nWSH exe: " + WScript.FullName + "\nScript name: " + WScript.ScriptFullName + "\nN. Argomenti: " + WScript.Arguments.length + "\n"; for (i = 0; i < WScript.Arguments.length; i++) out += "Args[" + i + "] = '" + WScript.Arguments(i)+ "'\n" out += WScript.interactive ? "Lo script è interattivo\n" : "Lo script non è interattivo\n\n"; WScript.Echo(out); out = "Informazioni di rete (WshNetwork):\n\nComputer name: " + wshnw.ComputerName + "\nDomain name: " + (wshnw.DomainName == undefined ? "Nessun dominio" : wshnw.DomainName) + "\nUser name: " + wshnw.UserName + "\n\nConnessioni di rete:\n\n"; for (d = wshnw.EnumNetworkDrives(), i = 0; i < d.length; i+= 2) out += d.Item(i) + " -> " + d.Item(i + 1) + "\n"; out += "\nStampanti Installate:\n\n"; for (p = wshnw.EnumPrinterConnections(), i = 0; i < p.length; i+= 2) out += p.Item(i) + " -> " + p.Item(i + 1) + "\n\n"; WScript.Echo(out); out = "Basic Shell Information:\n\nCurrent Directory: " + wshsh.CurrentDirectory + "\n\nEnvironment variables:\n\n"; for (en = new Enumerator(wshsh.Environment); !en.atEnd(); en.moveNext()) out += en.item() + "\n"; sf = new Array("AllUsersDesktop", "AllUsersStartMenu", "AllUsersPrograms", "AllUsersStartup", "Desktop", "Favorites", "Fonts", "MyDocuments", "NetHood", "PrintHood", "Programs", "Recent", "SendTo", "StartMenu", "Startup", "Templates"); out += "\nSpecial Folders:\n\n"; for (i = 0; i < sf.length; i++) out += sf[i] + " -> '" + wshsh.SpecialFolders.Item(sf[i]) + "'\n"; out += "\nYour HKCR\\.exe default value is '"+wshsh.RegRead("HKCR\\.exe\\")+"'\n\n"; WScript.Echo(out);

13 Componenti utili (DB) var rs = WScript.CreateObject("ADODB.Recordset"); var connstr = "Driver={Microsoft Excel Driver (*.xls)};DBQ=Prova.xls;DriverID=278"; rs.Open('select * from "Sheet1$"', connstr); while (!rs.eof) { WScript.Echo(rs(0)); rs.MoveNext(); }

14 Accounting (ADSI) var container = GetObject("LDAP://cn=Users,dc=miodominio,dc=it"); var e = new Enumerator(container); for (; !e.atEnd(); e.moveNext()) { var user = e.item(); if (user.Get("objectCategory").indexOf("Person") != -1) { WScript.Echo(user.distinguishedName); }

15 XML (MSXML)

16 .NET Hype

17 A managed OS

18 Monad, a.NET shell

19 Conclusioni


Scaricare ppt "PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie."

Presentazioni simili


Annunci Google