2012-06-06
Ciekawe ilu jest programistów na świecie? A gdyby tak sporządzić ich ranking, to na którym miejscu byś się znalazł? Znając charakter programistów, to pewnie każdy odpowiedziałby, że jest w pierwszej dziesiątce ;).
Zgrubne szacowania mówią, że mamy 100 milionów osób zajmujących się obecnie programowaniem. Aby tworzyć dobre aplikacje koniecznie trzeba posiadać najnowocześniejsze narzędzia do programowania. Czy to nie znamienne, że Microsoft wydał Visual Studio w wersji … 2003, 2005, 2008, 2010, 2012… ? Trzeba przyznać, że programiści platformy Windows mają naprawdę niewiele czasu na zapoznawanie się z nowymi narzędziami, ich możliwości są za to przeogromne. Czytaj dalej »
2012-05-24
Pisząc aplikację mającą działać coś w obszarze bezpieczeństwa musisz niekiedy odwołać się do nazwy grupy. Niestety, albo stety Microsoft tłumaczy nazwy grup. Stąd też aplikacja napisana na polski system operacyjny odwoła się do grupy „użytkonicy interaktywni” lub „administratorzy”. Uruchomienie tej aplikacji na angielskim systemie operacyjnym powinno posługiwać się nazwami „interactive users” lub „administrators”.
Przykłądami takich fukcji mogą być chociażby konstruktor PipeAccessRole (do nadawania uprawnień do potoku komunikacyjnego) lub funkcja Children.Find wywoływana dla obiektu DirectoryEntry (http://www.mobilo24.eu/jak-wylistowac-w-c-nazwy-kont-uzytkownikow-nalezacych-do-okreslonej-grupy/).
W takim przypadku można się posłużyć funkcja konwertującą numer SID użytkownika lub grupy na jego nazwę. O ile pewne numery SID są powszechnie znane, o tyle nazwy tych grup zmieniają się w różnych językach.
Trzeba tylko znać te popularne SID i umieć przełożyć je na nazwę. To pierwsze nie jest trudne . Pod adresem http://support.microsoft.com/kb/243330 znajduje sie lista Well Known SIDs.
Tłumaczenie SID na nazwę jest może niezbyt zrozumiałe, ale mieści się w jednej instrukcji:
string account = new System.Security.Principal.SecurityIdentifier(„S-1-5-32-544”).Translate(typeof(System.Security.Principal.NTAccount)).ToString();
Powyższa instrukcja odnajdzie nazwę grupy administratorzy, a linijka poniżej wskaże nazwę grupy „użytkownicy interaktywni”:
string account = new System.Security.Principal.SecurityIdentifier(„S-1-5-11”).Translate(typeof(System.Security.Principal.NTAccount)).ToString();
2012-05-24
Podobnie jak opisałem tu http://www.mobilo24.eu/jak-wylistowac-w-c-nazwy-kont-lokalnych-uzytkownikow/, należy rozpocząć od dodania namespace:
using System.DirectoryServices;
Teraz wskaż, gdzie ma być analizowana grupa. Tutaj chodzi o grupę administratorów z komputera lokalnego:
DirectoryEntry directory = new DirectoryEntry();
directory.Path = "WinNT://" + Environment.MachineName + ",computer";
Teraz można rozpocząć wyszukiwanie. Szukać będziemy członków grupy Administratorzy:
Najpierw utwórz obiekt wskazujący na grupę administratorzy:
DirectoryEntry groupAdmin = directory.Children.Find("administratorzy","group");
Następnie wywołaj dla tej grupy „metodę” „members” listującą członków grupy
object groupMembers = groupAdmin.Invoke("members", null);
Teraz można już przejść przez poszczególne zwrócone elementy i przepisać ich nazwy (tutaj do listy listBox1):
foreach (object groupMember in (IEnumerable)groupMembers) { DirectoryEntry member = new DirectoryEntry(groupMember); listBox1.Items.Add(member.Name); }
Źródło: http://stackoverflow.com/questions/6033391/get-windows-users-with-c-sharp
2012-05-24
Funkcje potrzebne do pracy z użytkownikami komputera lokalnego lub Active Directory znajdziesz w System.DirectoryServices. Zacznij więc od dodania tej przestrzeni nazw:
using System.DirectoryServices;
Załóżmy, że nazwy użytkowników mają być umieszczone jako pozycje w liście o nazwie listBox1. Odpowiedni kod może wyglądać tak:
Po pierwsze tworzysz obiect DirectoryEntry i określasz gdzie zostanie przeprowadzone wyszukiwanie. Dla komputera lokalnego jest to albo sama nazwa komputera albo nazwa komputera i po przecinku słowo computer. Dla domeny byłaby to nazwa domeny \ nazwa komputera:
DirectoryEntry directory = new DirectoryEntry();
directory.Path = "WinNT://" + Environment.MachineName + ",computer";
Następnie dla każdego ze znalezionych dzieci, sprawdzamy czy to dziecko jest Userem, a jeśli tak, to dodajemy do listy. Inne obiekty jakie tu można znaleźć to np grupy lub jednostki organizacyjne:
foreach (DirectoryEntry d in directory.Children) { if (d.SchemaClassName == „User”) { listBox1.Items.Add(d.Name); } }
Źródło: http://guyellisrocks.com/coding/c-script-to-list-local-users-and-disabled-status-on-windows-servers/
2012-05-17
Na stronie NBP publikowana jest lista kursów walut. Plik XLS z kursami znajduje się pod adresem http://www.nbp.pl/kursy/archiwum/2012.xls
Poniższy skrypt PowerShell pozwala zapisać ten plik lokalnie w katalogu c:\temp:
$url = „http://www.nbp.pl/kursy/archiwum/2012.xls„
$file = „c:\temp\2012.xls”
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile($url,$file)
Gotowe!
2012-04-27
Ten wpis dedykuję Łukaszowi, który uszczęśliwił mnie zadaniem zainstalowania ioncube na serwerze Linuxowym.
Instrukcja niby prosta. Ściągnąć pakiet (u mnie linux 32-bitowy), rozpakować, umieścić gdziekolwiek i wskazać na niego w php.ini.
Jeśli masz wątpliwości co do używanej wersji Linuxa/PHP itp odowłaj sie do phpinfo, czyli stwórz plik np p.php o zwartości:
<?php
phpinfo();
?> Czytaj dalej »
2012-04-25
Przechowywanie danych w pliku konfiguracyjnym aplikacji w postaci niezaszyfrowanej bywa ryzykowne. Dlatego warto zabezpieczyć napisy w jakiś sensowny sposób. Jednym z algorytmów szyfrujących AES (Advanced Encryption Standard) jest algorytm Rijndael. Nazwa algorytmu pochodzi od nazwisk jego twórców. Może nie jest to algorytm nie do złamania, jednak do takiego celu, jak ten z którym przyszło mi się teraz zmierzyć jest wystarczający, a nawet za dobry!
Przydatna prosta i krótka klasa ilustrująca na przykładzie jak używać tego algorytmu znajduje się pod adresem: http://www.obviex.com/samples/Encryption.aspx Po prostu – polecam. Klika ciekawostek o algorytmie Rijndael znajdziesz w wikipedi: http://pl.wikipedia.org/wiki/Advanced_Encryption_Standard.