<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GIS, UNIGIS und andere Kleinigkeiten &#187; Windows</title>
	<atom:link href="http://blog.peterschaer.ch/tag/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.peterschaer.ch</link>
	<description>Jupiter and beyond the Infinite</description>
	<lastBuildDate>Wed, 12 Oct 2011 16:50:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ArcGIS Server 9.3.1 auf Windows Server 2008 R2</title>
		<link>http://blog.peterschaer.ch/2010/03/11/arcgis-server-9-3-1-auf-windows-server-2008-r2/</link>
		<comments>http://blog.peterschaer.ch/2010/03/11/arcgis-server-9-3-1-auf-windows-server-2008-r2/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 06:56:33 +0000</pubDate>
		<dc:creator>Peter Schär</dc:creator>
				<category><![CDATA[ESRI]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[ArcGIS]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.peterschaer.ch/?p=245</guid>
		<description><![CDATA[<p>Heute morgen habe ich es zwitschern gehört, dass ArcGIS Server 9.3.1 von ESRI nun auch auf Windows Server 2008 R2 freigegeben wurde. Und siehe da: der entsprechende Eintrag findet sich auch auf der System Requirements-Seite.:</p>
<p></p>
<p>Das ist an und für sich eine sehr erfreuliche Entwicklung. Auffallend ist nur, dass ich vor gut einem Monat eine Anfrage [...]]]></description>
			<content:encoded><![CDATA[<p>Heute morgen habe ich es <a href="http://twitter.com/GISStauff/statuses/10293799936">zwitschern</a> gehört, dass ArcGIS Server 9.3.1 von ESRI nun auch auf Windows Server 2008 R2 freigegeben wurde. Und siehe da: der entsprechende Eintrag findet sich auch auf der <a href="http://wikis.esri.com/wiki/display/ag93bsr/ArcGIS+Server+Supported+Platforms">System Requirements</a>-Seite.:</p>
<p><a href="http://blog.peterschaer.ch/wp-content/uploads/r22.jpg"><img class="alignnone size-full wp-image-248" title="ArcGIS Server 9.3.1 for Windows Server 2008 R2" src="http://blog.peterschaer.ch/wp-content/uploads/r22.jpg" alt="" width="747" height="130" /></a></p>
<p>Das ist an und für sich eine sehr erfreuliche Entwicklung. Auffallend ist nur, dass ich vor gut einem Monat eine Anfrage zum genau gleichen Thema an den ESRI-Support gerichtet und die Antwort erhalten habe, dass Win2008 R2 erst mit ArcGIS Server 10 freigegeben wird und nicht mehr für 9.3.1! Ich würde mir in so einem Fall eine klarere Information von ESRI wünschen. Warum nicht z.B. auf der System Requirements-Seite vermerken, dass Win2008 R2 zurzeit geprüft wird und das Resultat noch offen lassen. So wäre zumindest klar, dass noch Abklärungen im Gange sind.</p>
<p>Wie auch immer: jetzt darf ich die frohe Kunde an unser Rechenzentrum weiterreichen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.peterschaer.ch/2010/03/11/arcgis-server-9-3-1-auf-windows-server-2008-r2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manuelle COM to .NET Interoperability</title>
		<link>http://blog.peterschaer.ch/2006/05/10/manuelle-com-to-net-interoperability/</link>
		<comments>http://blog.peterschaer.ch/2006/05/10/manuelle-com-to-net-interoperability/#comments</comments>
		<pubDate>Wed, 10 May 2006 12:46:51 +0000</pubDate>
		<dc:creator>Peter Schär</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[ESRI]]></category>
		<category><![CDATA[NET]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.peterschaer.ch/blog/?p=167</guid>
		<description><![CDATA[<p>Wegen diverser Einschränkungen auf dem GIS-Terminalserver an meinem Arbeitsplatz, kann ich mit ArcObjects entwickelte .NET-Komponenten nicht automatisch im COM-System registrieren und damit für ArcGIS zugänglich machen. Dasselbe gilt natürlich auch für selber entwickelte COM-Objekte, auch die können nicht registriert werden. Die Registrierung von .NET-Komponenten im COM-System läuft unter dem Stichwort &#8220;COM to .NET Interoperability&#8221;. Grob [...]]]></description>
			<content:encoded><![CDATA[<p>Wegen diverser Einschränkungen auf dem GIS-Terminalserver an meinem <a href="http://www.umwelt-schweiz.ch">Arbeitsplatz</a>, kann ich mit ArcObjects entwickelte .NET-Komponenten nicht automatisch im COM-System registrieren und damit für ArcGIS zugänglich machen. Dasselbe gilt natürlich auch für selber entwickelte COM-Objekte, auch die können nicht registriert werden. Die Registrierung von .NET-Komponenten im COM-System läuft unter dem Stichwort &#8220;COM to .NET Interoperability&#8221;. Grob gesagt müssen dazu folgende Schritte ausgeführt werden:</p>
<p>1) Jeder Klasse in der DLL, die für das COM-System sichtbar sein soll, muss im Code eine eindeutige ID, die sogenannte GUID, zugewiesen werden. Die GUID kann mit dem GUID-Tool erzeugt werden. Das GUID-Tool ist Teil der ArcGIS-Installation und wahrscheinlich auch in der Visual Studio-IDE enthalten. Die Zuordnung erfolgt im Code mit folgenden Anweisungen:
<pre>	[ClassInterface(ClassInterfaceType.None)]</pre>
<pre>	[Guid("7CF958B9-0F0C-4CFF-B8C8-0DC6528071FA")]</pre>
<pre>	public class BerechneLaenge: ICommand</pre>
<p>2) Um dem COM-System die neue DLL bekanntzumachen, müssen verschiedene Einträge in der Windows-Registry vorgenommen werden. Der eigentlich dafür vorgesehene Teilschlüssel der Registry (HKEY_CLASSES_ROOT) ist auf dem GIS-Server schreibgeschützt. Stattdessen muss die Registrierung im Teilschlüssel HKEY_CURRENT_USER\Software\Classes vorgenommen werden. Das heisst aber auch, dass die DLL dann nur für den Benutzer verfügbar ist, der die Registrierung vorgenommen hat. Wenn ein anderer Benutzer die DLL auch benutzen will, muss er sie ebenfalls noch registrieren. </p>
<p>3) Die Registrierung geschieht mit einem Registry-File, in dem alle notwendigen Einträge zusammengefasst sind. Die Erstellung des Grundgerüsts für dieses Registry-File geschieht mit Regasm.exe. Regasm steht für &#8220;Register Assembly&#8221; und ist Teil des .NET-Frameworks:
<pre>	RegAsm.exe /codebase /reg:MyRegFile.reg MyDLL.dll</pre>
<p>4) Im so entstandenen Registry-File muss jedes Auftreten von &#8220;HKEY_CLASSES_ROOT&#8221; mit &#8220;HKEY_CURRENT_USER\Software\Classes&#8221; ersetzt werden (Suchen/Ersetzen in einem Editor).</p>
<p>5) Der Pfad in jedem Codebase-Wert muss auf das Verzeichnis gesetzt werden, in dem die DLL liegt und in dem sie später auch ausgeführt wird.</p>
<p>6) Jedes ITool, ICommand oder andere ArcObjects-Interface, das in ArcGIS verwendet werden soll, muss in einer oder mehreren sogenannten &#8220;Command Category&#8221; registriert werden. Einen Überblick über alle auf dem jeweiligen System vorhandenen Categories zeigt der OLEViewer oder der &#8220;Component Category Manager&#8221; (ist Teil der ArcGIS-Installation). Z.B. sind alle ArcMap-Commands in der Kategorie &#8220;ESRI Mx Commands&#8221;, alle ArcMap-Toolbars in der Kategorie &#8220;ESRI Mx CommandBars&#8221;, alle ArcMap-Extensions in der Kategorie &#8220;ESRI Mx Extensions&#8221; etc. ESRI hat dazu eine <a href="http://edndoc.esri.com/arcobjects/9.1/default.asp?url=/arcobjects/9.1/ArcGISDevHelp/TechnicalDocuments/Guids/ArcMapIds.htm">Übersicht</a> über alle Commands, Menus und Toolbars in ArcMap und deren Kategorien und GUIDs zusammengestellt. Jede Kategorie weist wiederum eine eindeutige GUID auf, die aus der erwähnten Übersicht oder via den OLEViewer ermittelt werden kann. Der Registry-Schlüssel für die Category-Registrierung sieht etwa so aus (alle drei Zeilen gehören auf eine):
<pre>[HKEY_CURRENT_USER\Software\Classes\CLSID\{Klassen-GUID}\Implemented Categories\{Kategorien-GUID}]</pre>
<p>Die erste GUID ist diejenige der betroffenen Klasse (Command, Toolbar etc.), die zweite GUID diejenige der Kategorie, in dem die Klasse registriert werden soll. Mit dem oben erwähnten Regasm-Befehl wird gleichzeitig auch für jede Klasse ein Registry-Schlüssel angelegt, der die Klasse in der Kategorie &#8220;.NET Category&#8221; registriert. Dies muss also nicht mehr manuell erledigt werden.</p>
<p>7) COM braucht allerdings noch weitere Infos über eine DLL, damit alles klappt. Diese Informationen werden in einer Type Library gespeichert. Die &#8220;Type Library&#8221; kann mit dem Programm TypeLibraryExporter.exe erzeugt werden, welches Teil des Buches &#8220;<a href="http://www.apress.com/book/bookDisplay.html?bID=81">COM and .NET Interoperability</a>&#8221; ist. Der Sourcecode kann auf der <a href="http://www.apress.com/book/bookDisplay.html?bID=81">Buch-Homepage</a> heruntergeladen werden. Das Programm kann einfach kompiliert und ausgeführt werden. Anschliessend müssen nur noch Pfad und Dateiname der DLL eingegeben und die Frage nach der Registrierung für COM mit Nein beantwortet werden. Danach wird das TLB-File erzeugt. Dieses gehört dann in das gleiche Verzeichnis wie die DLL.</p>
<p> <img src='http://blog.peterschaer.ch/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Die Type Library selbst muss auch noch in der Registry registriert werden. Die Vorlage dazu:
<pre>[HKEY_CURRENT_USER\Software\Classes\TypeLib\{TLB-GUID}]</pre>
<pre>[HKEY_CURRENT_USER\Software\Classes\TypeLib\{TLB-GUID}\1.0]</pre>
<pre>[HKEY_CURRENT_USER\Software\Classes\TypeLib\{TLB-GUID}\1.0\0]</pre>
<pre>[HKEY_CURRENT_USER\Software\Classes\TypeLib\{TLB-GUID}\1.0\0\win32]@="E:\\Pfad\\zur\\TLB.tbl"</pre>
<pre>[HKEY_CURRENT_USER\Software\Classes\TypeLib\{TLB-GUID}\1.0\FLAGS] @="0"</pre>
<p>TLB-GUID steht für die GUID der TLB (im OLEViewer unter File\View TypeLib auffindbar) und die Versionsnummern (1.0 etc.) sollten mit denjenigen Versionsnummern übereinstimmen, die man der DLL in der IDE zuweist.</p>
<p>9) Das durch diese Schritte entstandene Registry-File muss nun nur noch ausgeführt werden und dann ist die DLL im COM-System registriert.</p>
<p>10) Die Überprüfung, ob alles geklappt hat, kann auf folgende Arten vorgenommen werden:
<ul>
<li>Mit regedit nachschauen, ob alle relevanten Einträge in der Registry auch wirklich vorgenommen wurden.</li>
<li>Im OLEViewer nachschauen, ob alle Klassen in den richtigen Kategorien auftauchen.</li>
<li>In ArcGIS kontrollieren, ob die Komponenten an den richtigen Orten auftauchen.</li>
</ul>
<p>Diese Vorgehensweise ist sicherlich nicht gerade unkompliziert oder elegant, aber sie in der aktuellen Konfiguration doch die simpelste Lösung!</p>
<p>Nützliche Tools:
<ul>
<li><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/html/e4b80b78-0e66-4e67-a4a0-6acd3263d572.asp">OLE Viewer</a>: ein sehr nützliches Werkzeug zur Betrachtung des COM-Systems.</li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms241442.aspx">GUID-Tool</a>: erzeugt eindeutige GUID (Teil der ArcGIS-Installation oder in Visual Studio enthalten).</li>
<li><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconmsildisassemblerildasmexe.asp">Ildasm</a>: zeigt den Inhalt von .NET Assemblies an.</li>
<li><a href="http://www.aisto.com/roeder/dotnet/">.NET Reflector</a>: bietet eine ganze Reihe von Betrachtungs- und Analysefunktionen für das .NET-Framework.</li>
<li><a href="http://www.icsharpcode.com/OpenSource/SD/">SharpDevelop</a>: eine Open Source-IDE für das .NET-Framework. SharpDevelop wurde selber auf dem .NET-Framework implementiert.</li>
</ul>
<p>Nützliche Dokumentationen:
<ul>
<li><a href="http://www.apress.com/free/index.html">COM and .NET Interoperability</a>: Dieses Buch deckt so ziemlich jeden Aspekt des Themas ab. Zudem ist das Buch <a href="http://www.apress.com/free/index.html">kostenlos</a> verfügbar!</li>
<li><a href="http://edndoc.esri.com/arcobjects/9.1/">ESRI Developer Network</a>: EDN enthält etliche Ressourcen zum Thema ArcObjects und .NET.</li>
<li><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcondeployingapplicationforcomaccess.asp">MSDN</a>: Microsofts Dokumentation des Themas.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.peterschaer.ch/2006/05/10/manuelle-com-to-net-interoperability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

