Laden...

Forenbeiträge von TOM_MUE Ingesamt 200 Beiträge

08.11.2005 - 20:52 Uhr

Hallo,

im Falle von Microsoft Visual Studio ist ein Add-On zum Beispiel eine der enthalten Programmiersprachen (C#,VB.NET,C++,C++.NET). Diese werden sogar als eigene Programme bezeichnet. Ein Add-In ist dagegen eine Erweiterung der Gesamtheit, da es für alle gleich gelten kann aber nicht muss 😉

TOM_MUE

05.11.2005 - 19:40 Uhr

@S.H.-Teichhof,

und warum sollten die für Anfänger nicht interesant sein?

TOM_MUE

02.11.2005 - 13:35 Uhr

Hallo Eisbär,

für das Sammeln von Nachrichten würde ich mich eines WindowsDienstes oder eines Webservices bedienen (in Bezug auf das Asynchrone wegschicken der Nachrichten). Kannst aber auch die Eventklassen von COM+ benutzen. Das bedeutet wenn das Event wie von LastGentleman beschrieben ausgelöst wird, werden alle Komponenten angesprochen die eine bestimmten Schnittstelle implementieren. Message-Queue ist in Verbindung damit sicher auch nicht falsch.

Ich glaube da gibt es viele Möglichkeiten.

Gegenfrage: Wie kommst Du mit Log4NET zurecht?

HTH

TOM_MUE

20.10.2005 - 09:22 Uhr

Hallo stift,

dafür eignet sich die Klasse "Mutex" aus dem Namespace "System.Threading". Mit einem Mutex-Objekt kannst Du verhindern, dass mehrere Threads oder Prozesse gleichzeitig auf eine freigegebene Ressource zugreifen. Da Du ja mit jedem Start deiner App einen neuen Process startest, wird über den Namen Deiner Application festgestellt ob ein anderer Thread darauf schon Zugrigff hat. Hier ein einfaches Sample:


using System;
using System.Threading;

class Entry
{
	private static Mutex s_AppStartMutex = null;
		
	[STAThread]
	static void Main(string[] args)
	{
		bool l_Flag = false;

		s_AppStartMutex = new Mutex(true,"AppStartTest",out l_Flag);

		if(! l_Flag)
		{
			Console.WriteLine("Anwendung wurde schon mal gestartet");
		}
		else
		{			

			Console.WriteLine("Anwendung wurde zum ersten Mal gestartet");
		}

		Console.Read();
	}
}

HTH

TOM_MUE

19.10.2005 - 09:31 Uhr

Hallo,

kann es sein das Du vergessen hast, das deine ReadXmlSettings-Methode den Pfad auch schon braucht? Wenn diese Methode im Konstruktor aufgerufen wird und dein Field pathToXmlFile immer noch Empty ist, dann muss es krachen. Ich denke Du solltest Deine Initialisierung überdenken.

Gruß

TOM_MUE

10.10.2005 - 16:23 Uhr

Hallo @Xqgene,

sorry, dann hatte ich Dich falsch verstanden. Das einzige was ich für Deinen Anwendungsfall (in Bezug auf die Beschreibung der Quick Console) gefunden habe, ist das "Immediate Window".

DEBUG --> WINDOWS --> IMMEDIATE WINDOW.

Bin mir nicht sicher aber denke das das Quick Consol Window rausgefallen ist und vielleicht nur bei der Compilierung von VS 2005 vergessen zu integrieren. BETA2 sollte zwar schon Feature complete sein aber der Altag lehrt uns mal wieder etwas anderes 😉


Immadiate Window

HTH

TOM_MUE

09.10.2005 - 14:32 Uhr

Hallo @Stropher,

Eines der Top 10 Features der Express-Editions ist das so genannte ClickOnce. Damit kannst Du Deine Application an dritte weitergeben und ein Setup erstellen.

Link: Top 10 Features

Selektiere einfach im Solutionexplorer dein Project und klicke dann auf Properties (also auf die Project-Properties). Dadurch öffnet sich der Propertiedesigner in dem Du auf der linken Seite die Registerkarte "publish" findest.

HTH

TOM_MUE

07.10.2005 - 09:51 Uhr

Hallo @Xqgene

kann es sein das Du das Outputwindow meinst? In dieses Kannst Du mit den Methoden der Klasse Debug im Namespace System.Diagnostics Informationen ausgeben. War aber auch schon unter VS 2003 und VS 2002 möglich.

Hier ein Sample:


namespace DebuggerTest01
{
    class Program
    {
        static void Main(string[] args)
        {  
#if DEBUG
            System.Diagnostics.Debug.WriteLine("Hallo Welt");
#endif
        }
    }
}

PS: achte darauf das Deine Solution Configuration auf DEBUG steht 😉 Gern gamachter Fehler der mir auch ab und zu passiert.

HTH

TOM_MUE

05.10.2005 - 21:54 Uhr

hi @tomschrot,

hm, leider habe ich keine Outlook Lib 10.0 sondern nur die 11.x. darum kann ich Dir kein direktes Sample leifern. Aber wenn es keine "get_..." Methode gibt, dann solltest Du vielleicht mal nachsehen ob Du eine GetNext() Emthode findest die Du dann in Verbindung mit einer while Schleife verwenden könnteest.

Ich denke wenn Du dabei nichts findest, das ich mir mal die 10.0 Lib von Outlook besorge und ein Sample schneider.

Gruß

TOM_MUE

PS: Habe gerade ein Sample für den InboxFolder von Outlook gefunden. Ist auch für die Lib Version 10.0 geschrieben.

First, be sure to add the "Microsoft Outlook 10.0" reference to your project.

Then, try this code snippet:



private void Spy()
{

Outlook.Application outlookApp;
Outlook.NameSpace outlookNamespace;

outlookApp = new Outlook.ApplicationClass();
outlookNamespace = outlookApp.GetNamespace("MAPI");
outlookNamespace.Logon("your_profile","your_password",true,true);

Outlook.MAPIFolder mapiFolder = outlookNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

Outlook.Items oItems = mapiFolder.Items;
Outlook.MailItem mailItem = (Outlook.MailItem)oItems.GetFirst();
while (mailItem != null) 
{
string strEmailContent = mailItem.Body; 
mailItem = (Outlook.MailItem)oItems.GetNext();
}
}


05.10.2005 - 11:42 Uhr

Hallo @tomschrot,

Das was Du versuchst ist mit einem VW golf vom Typ eins gegen einen Baum zu fahren und Dich darauf zu verlassen das der Airbag aufgeht weil es ja ein Golf ist. Kann er aber nicht da der Golf eins vom Werk aus keinen Airbag eingebaut bekommen hat. OK 😉 bisschen weit hergeholt.

Das Beispiel das Du als reference genommen hast, ist expliziet für Oulook 2003. Steht auch ganz oben auf der Seite die Du als Link hinzugefügt hast. Du selbst hast aber die ObjectLib von Outlook 2000 genommen und die implementiert keine GetEnumerator() Methode. Schau mal nach ob "MAPIFolder.Items" eine get_... Methode hat. Dann kannst Du sicher ein Array erstellen durch das Du dann iterieren kannst. Oder, Du referenzierst dir die ObjectLib von Office 11.

HTH

TOM_MUE

14.09.2005 - 17:08 Uhr

VISIO von Microsoft in Verbindung mit VS 2003/2002.

HTH

TOM_MUE

11.09.2005 - 18:22 Uhr

Huch, da ist mir die Anrede ja richtig blaublütig geraten 😉. Na ja, ich denke das geht schon in Ordnung.

TOM_MUE

11.09.2005 - 16:37 Uhr

Vielen Dank für die schnellen Antworten 😉

Ich werde Euren Lösungsansatz gleich mal ausprobieren.

TOM_MUE

11.09.2005 - 16:05 Uhr

Hallo Leute,

ich habe gerade einen dicken Knoten im Kopf. Folgene Aufgabe habe ich mir gestellt:

Durchsuche ein beliebigen Pfad meiner Festplatten nach einer Datei mit einem ganz estimmten Namen. wenn Sie gefunden wurde brich die Rekursion ab und suche nicht mehr weiter.

dazu habe ich mir folgenden Code geschrieben:


class Class1 
   { 
      public delegate void FindProgress(string a_FolderName); 

      /// <summary> 
      /// The main entry point for the application. 
      /// </summary> 
      [STAThread] 
      static void Main(string[] args) 
      { 

         StringCollection l_ResultCollection = FindFiles(@"M:\","NeuTOM.txt",true,new FindProgress(FindProgressHandler)); 

         foreach(string f_FileName in l_ResultCollection) 
         { 
            Console.WriteLine(string.Format("gefunden in: {0}",f_FileName)); 
         } 

         Console.WriteLine("Suche beendet. Drücken Sie ein Taste zum Beenden des Programms."); 

         Console.Read(); 
      } 

      private static void FindProgressHandler(string a_FolderName) 
      { 
         Console.WriteLine(string.Format("Durchsuche: {0}",a_FolderName)); 
      } 

      public static StringCollection FindFiles 
         ( 
         string a_FolderName, 
         string a_SearchPattern, 
         bool a_SearchRecurse, 
         FindProgress a_FindProgress 
         ) 
      { 
         StringCollection l_FileNameColl = null; 

         DirectoryInfo l_DirInfo = null; 

         try 
         { 
            l_FileNameColl = new StringCollection(); 

            l_DirInfo = new DirectoryInfo(a_FolderName); 
             
            FindFilesinFolder 
               ( 
               a_SearchPattern, 
               l_DirInfo, 
               a_SearchRecurse, 
               l_FileNameColl, 
               a_FindProgress 
               ); 
         } 
         catch 
         {} 

         return l_FileNameColl; 
      } 


      private static void FindFilesinFolder 
         ( 
         string a_SearchPattern, 
         DirectoryInfo a_DirInfo, 
         bool a_SearchRecurse, 
         StringCollection a_ResultFiles, 
         FindProgress a_FindProgress 
         ) 
      { 
         if(a_FindProgress != null) 
            a_FindProgress(a_DirInfo.FullName); 

         if(a_SearchRecurse) 
         { 
            DirectoryInfo[] l_SubFolders = a_DirInfo.GetDirectories(); 

            for(int idx = 0; idx < l_SubFolders.Length; idx++) 
            { 
               FindFilesinFolder(a_SearchPattern,l_SubFolders[idx],true,a_ResultFiles,a_FindProgress); 
            } 
         } 

         FileInfo[] l_Files = a_DirInfo.GetFiles(a_SearchPattern); 

         foreach(FileInfo f_FileInfo in l_Files) 
         { 
            a_ResultFiles.Add(f_FileInfo.FullName); 
         } 
      } 
   } 
 

Nun habe ich mir Gedanken gemacht wie ich die Rekursion anhalten kann wenn die entsprechende Datei gefunden wurde. Da ich nicht will das ihr Dur meine eigenen Versuche in die Irre geführt werdet habe ich die fehlgeschlagenen Versuche von mir mal weggelassen.

Kann mir jemand auf den richtigen weg helfen. Ich bekom das einfach nicht hin.

Vielen Dank

TOM_MUE

08.09.2005 - 18:20 Uhr

Standardmäßig: nein.

Du kannst Dir zwar über Klassen/Schnittstellen im .NET Framework eigene Designer für Visual Studio schreiben aber den Standarddesigner kannst Du nur über die Extensibilitie des VS überschreiben was aber nicht so einfach ist zumal es nur über das VSIP möglich wäre.

HTH

TOM_MUE

08.09.2005 - 11:06 Uhr

Setz den Cursor auf den Funktionsaufruf und klicke "F12". Wenn Du den Cursor auf ddie Methode setzt kommst due mit "Umschalt + F12" zum ersten Funktionsaufruf.

HTH

TOM_MUE

08.09.2005 - 10:26 Uhr

Eigentlich nur die „csproj“ und die „sln“ alle anderen Dateien zieht sich das Studio selber nach. Drag&Drop ist auch ne Möglichkeit. Hast Du ein Project mit VS 2005 von VS2003 einmal Konvertiert, hat Dir der Konvertierungs- Wizard ja angeboten ein Backup der VS2003er Version anzulegen.

HTH

TOM_MUE

08.09.2005 - 09:39 Uhr

Wie wäre es wenn Du ganz simpel auf die jeweilige Datei einen Rechtsklick machst und im Kontextmenu "öffnen mit" auswählst. Dann kannst Du sogar festlegen das in Zukunft dieser Dateityp immer mit VS2003 geöffnet werden soll oder mit Notepad 😉

HTH

TOM_MUE

07.09.2005 - 20:58 Uhr

Grundkurs Visual Studio Add-in-Entwicklung:

Ein Add-In für Visual Studio .NET 2002/2003 benötigt grundsätzlich nur eine öffentliche Klasse die von der Schnittstelle "IDTExtensibility2" abgeleitet ist und die damit verbunden fünf Methoden

  • OnConnection
  • OnStartupComplete
  • OnAddInsUpdate
  • OnBeginnShutDown
  • OnDisconnection

implementiert. Danach kann die Klasse als ganz normale DLL kompiliert werden.

Danach muss die DLL für Visual Studio registrert werde. Das ist bei den Versionen 2003 und 2002 nötig, da diese nur COM verstehen. Zum Glück kann hier die COM-Interoperabilität benutzt werden. Damit eine .NET Klasse für COM verfügbar ist, braucht diese nur als COM registriert werden. Dazu sind für ein Visual Studio .NET Add-In folgende Registrierungsschlüsseleinträge notwendig:

  • HKEY_CLASSES_ROOT&lt;ProgID>
    Ein Schlüssel, dessen Name die ProgID der Klasse darstellt. Ist also der Name Deiner TestClass (die die auch die Schnittstelle IDTExtensibility2 implementiert) und sie liegt im Namespace TestNamespace, dann ist die ProID TestNamespace.TestClass

  • HKEY_CLASSES_ROOT&lt;ProgID>\CLSID
    Ein Schlüssel dessen Name die CLSID der Klasse ist, die auch die IDTExtensibility2 implentiert (TestClass)

  • HKEY_CLASSES_ROOT\CLSID&lt;CLSID>
    Ein Schlüssel dessen Name die CLSID der Klasse ist, die auch die IDTExtensibility2 implentiert (TestClass)

  • HKEY_CLASSES_ROOT\CLSID\InprocServer32
    Ein Schlüssel, dessen benannte Werte die Klasse angeben, die die IDTExtensibility2 Schnitstelle implementiert und die Assembly, in der die Klasse definiert ist.

Keine Angst, das ganze muss nicht von Hand eingegeben werden. Dafür gibt es das Tool "RegAsm" das Deine DLL automatisch registriert.

Öffne einfach die Konsole des Visual Studio .NET 2003 und ruf volgende Befehl für Deine DLL auf "regasm /codebase dllname.dll". Ignoriere die darauf hin volgende Warnung wegen dem Schlüsselwort "codebase".

Nun hast Du zwar eine voll funktionsfähige COM-DLL aber das Visual Studio weiß davon noch nix. Dafür sind folgende Registrierungseinträge notwendig, die Du aber diesmal wirklich von Hand vornehmen musst (außer Du erstellst ein AddIn mit dem AddIn-Assistenten von Visual Studio .NET 2003).

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\AddIns&lt;ProgID>

  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\7.1\AddIns&lt;ProgID>

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSA\7.1\AddIns&lt;ProgID>

  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\VSA\7.1\AddIns&lt;ProgID>

Nach dem Du die schlüssel eingetragen hast, öffnest Du Visual Studio .NET 2003 und findest Dein AddIn im AddIn-Manager.

HTH

TOM_MUE

PS: bald dazu viel mehr und mit Bildern auf www.tom-mue.de thx

02.09.2005 - 11:55 Uhr

Hallo,

unbenutzte Fields werden von VS .NET 2003 oder auch VS .NET 2002 durch blaue unterkringelung gekennzeichnet. Methoden die nicht mehr benutzt (aufgerufen) werden kannst Du wie folgt finden:

Öffne Deine Solution. Drücke "Ctrl + Shift + F". Wähle in der Dropdown-Box "Look in:" "Entire Solution" aus. Trage den Namen einer Methode ein, von der Du meinst das sie nicht mehr verwendet wird. Dann bekommst Du alle Files aufgelistet, in denen der Name der Methode auftaucht.

OK OK, ist vielleicht etwas aufwendig aber ich kenne auch kein Add-In was Dir diese Funktionalität anbietet. Ich glaube das macht net mal der Resharper.

HTH

TOM_MUE

02.09.2005 - 10:58 Uhr

Hallo,

ich habe ein XML in dem es ein Node mit dem Attribute "birthday" gibt. Nun möchte ich gerne einen XPath-Ausdruck formulieren, der mir nur die Nodes Person zurückgibt, die größer oder kleiner eines bestimmten Datums sind.


<?xml version="1.0" encoding="UTF-8"?>
<Personen>
	<Person lastname="Mueller" firstname="Karl" birthday="10.10.1976" ID="{D257B2AA-540F-416c-9F11-C4D3AB70B02A}">
		<hobbies>
			<hobbie bereich="Computer" name="Programmieren"/>
			<hobbie bereich="Küche" name="Kochen"/>
		</hobbies>
	</Person>
	<Person lastname="Meier" firstname="Hans" birthday="10.10.1986"  ID="{A2F34B59-A3EF-4454-8AA8-05ABCABFB936}">
		<hobbies>
			<hobbie bereich="Computer" name="Architektur"/>
			<hobbie bereich="Bildbearbeitung" name="Webdesign"/>
		</hobbies>
	</Person>
</Personen>

Die Abfrage

//Person[@birthday<"10.10.1989"]

gibt mir leider nix zurück.

Besten Dank

TOM_MUE

29.08.2005 - 23:01 Uhr

Hallo Quallo,

also ich habe auch nicht behauptet, das Eure Software etwas mit Flickschusterrei oder unüberlegt zusammengeworfener billiger Software zu tun hat. sicher nicht.

Aber warum sollte Euch Cobol vom Einsatz einer guten Fehlerberichtserstattung und Tracing-Komponente abhalten???

Wenn Fehler schlecht beschrieben sind (so ist es nicht nur aus meiner Erfahrung) dann liegt es entweder daran das es der Kunde selbst tun muss oder das die Trace-Fehlerberichts-Komponente schlecht implementiert wurde. Kannst Du Dir vorstellen wieviel Geld Ihr sparen könntet wenn ihr keine komplett aufgerüsteten Rechner mehr in Euren Hallen als totes Kapital rumstehen lassen müsstet sondern per Internet oder VPC Eure Fehlerberichte auswerten könntet. Stell Dir mal vor MS, DELL oder IBM würden für jeden einen Ersatzrechner bereithalten der ein Softwareprolem hat, was er schlecht beschreiben kann.

PS: Nur zur Sicherheit. Ich will keinen Grabenkampf vom Zaun brechen =) Ist aber auch schon ganz schön OT.

TOM_MUE

29.08.2005 - 18:08 Uhr

Hallo @Quallo,

also mal ganz offen gesprochen:

"Wenn ich eine Software bekommen würde (ob kaufen oder nicht) bei der im Falle eines Fehlers eine Screencapture-App losrennen würde die meine Grafikkarte gar nicht unterstützt oder meinen begrenzten Arbeitsspeicher völlig in die Knie zwingt, würde ich Euch das Ding um die Ohren hauhen (ist nicht böse gemeint aber ernst!)"

Wie wäre es denn mit einem sauberen Fehlertracing in Euren Programmen? Dazu gibt es sehr viele Berichte. Sowohl im Internet als auch in bekannten Fachzeitschirften und oder Büchern. Komponenten gibt es auch genügend dazu. Fehlertracing und Fehlerberichterstattung sind sehr wichtige Bestandteile einer guten Software. Sie sollte sich aber vor allem durch Unauffälligkeit auszeichnen und nicht durch tolle Filmchen!

In der Firma in der ich arbeite war eine meiner ersten Aufgaben eine hoch performante Trace-Komponente zu schreiben. Und wenn ich das vor 4 Jahren als Praktikant geschafft habe, sollte es für Euch auch kein Problem sein. Oder 😁 🤔

Gruß

TOM_MUE

26.08.2005 - 08:41 Uhr

Hallo Klaus1,

select das Consol Project in Deinem SolutionExplorer und rufe dann dessen Properties auf. Dort klickst Du einfach auf "Debugging" und dann im rechten Fenster, trägst Du unter "Command Line Arguments" die Argumente ein, die der Anwendung übergeben werden sollen.

Hier ein Sample wie Du in der Main die Argumente abfragen könntest:



[STAThread]
		static void Main()
		{
			if(Environment.GetCommandLineArgs().Length > 0)
			{
				int l_ArgCount = 0;

				foreach(string f_CommandLineArg in Environment.GetCommandLineArgs())
				{
					Console.WriteLine(String.Format("Argument {0}: {1}",l_ArgCount,f_CommandLineArg));
					
					l_ArgCount++;
				}
			}

			Console.Read();
		}


HTH

TOM_MUE

10.08.2005 - 11:36 Uhr

So wie sich das von Deinem Screenshot darstellt nutzt ihr in Eurem Team unterschiedliche Tab-Größen. Kan das sein. Markier mal den gesammten Kode und drücke dann Strg+F + F. Die Zeile 1007 hat einen unnormalen Zeileneinschub.

HTH

TOM_MUE

10.08.2005 - 10:36 Uhr

Hallo @phunkydizco

Du kannst für einen automatische Zeilenumbruch die Tastenkombination Strg + R + R benutzen. Dieser Zeilenumbruch passt sich auch automatisch an neu eingeblendete ToolWindows an.

HTH

TOM_MUE

08.08.2005 - 11:39 Uhr

Hallo Fabian,

Leider ist das anzeigen "ALLER" Aufgaben (tasks) in Visual Studio .NET 2003 etwas seltsam gestaltet worden. Aktiviere das Taskfenster in VS 2003 und klicke mit der rechten Maustaste auf die Caption des Taskwindows. Dort kannst Du über den Kontextmenüeintrag alle Tasks anzeigen lassen. Leider wird sich die Einstellung nur auf das Projekt auswirken und nicht auf alle zukünftig geöffneten Projekte.

Tipp: Du kannst Dir aucvh eigene Aufgabenbezeichner in VS 2003 definieren. Solltest Du also mehr Bezeichner als nur "TODO:" benötigen ist dies über die Optionen in VS 2003 möglich. Mit der Tate F8 kannst Du nach dem Suchen der Aufgaben bei aktvierten Aufgabenfenster (Taskwindow) von einer Aufgabe zur nächsten springen.

HTH

TOM_MUE

05.08.2005 - 10:03 Uhr

Das Control was Du suchst ist das Property Grid.

Hinzufügen:

Rechtsklick auf deine ToolBox, AddRemove Items, .NET-Controls, Property Grid.

Gruß

TOM_MUE

01.08.2005 - 21:00 Uhr

Hallo tb

vielen Dank für Deine Antwort. So wit ich meinen vermissten Artikel von CodeProject noch im Hinterkopf habe, ist die TaskBar von Windows sogar dafür vorgesehen neue Componenten aufzunehmen. Als Beispiel ist da der Windows Media Player oder die Adressleiste zu nennen. Na ja, und MS Desktop Search tut das ja auch. Das mit dem PInvoke war mir schon schon klar, nur hätte ich nicht gewusst wo ich da anfangen soll. da war Dein Tipp mit "Shel_TrayWnd" ganz gut. Nur bin ich mir niciht sicher ob "Shell_TrayWnd" der Taskbar entspricht oder doch nur dem Tray-Fenster in dem die Tray Icons dargestellt werden.

OK, ihc werde mal noch etwas bei www.pinvoke.net rumsuchen.

TOM_MUE

01.08.2005 - 13:14 Uhr

Hallo,

kennt jemand von euch ein Bsp. wie man es unter .NET schafft ein Textfeld in die Windows Taskbar einzufügen? Ich war mir sicher das ich so ein Beispiel mal bei Codeproject gesehen hatte aber im Moment habe ich nix gefunden.

Gruß

TOM_MUE

21.07.2005 - 08:42 Uhr

Hallo homer jay,

was soll denn deine kleine C#-EXE ansprechen um die Deinstallation einzuleiten?

Das mit dem Autostart kannst Du viel einfacher im Setupprojekt lösen. Lege im FileSystem Explorer Deines Setupprojekts den "SpecialFolder" "User's Startup Folder" an. Dort fügst Du eine Verknüpfung zu dem Programm ein, das dann immer mit Windows gestartet werden soll. Zu fidnen ist dann die Verknüpfung nach der Installation im Ordner "start-->All Programms-->Startup".

HTH

TOM_MUE

20.07.2005 - 12:30 Uhr

Hui, ich dachte das sich dieser Befehl mit "devenv /setup" automatisch erledigt. Darum habe ich ihn auch nicht erwähnt. Aber schön das ich das jetzt auch weiß. Man lernt nie aus 😉

TOM_MUE

20.07.2005 - 12:26 Uhr

Hi Fabian,

Zu Dienem Punkt 1 ist noch ein Kleiner Trick etwas hilfreich. Wie von Noodles beschrieben, setzt Du in Visual Studio .NET unter Tools-->Options-->TextEditor-->C#-->Formatting das Häkchen bei "Leave open braces on same line as construct".

Nun wird Dir Visual Studio aber alle automatisch generierten C#-Klassen immer noch in der alten Form generieren. Auch bestehender Code wird sich nicht von alleine auf Deine gewohnte Formatierung ändern. Selectiere nun einfach all deinen Code der sich von der KLammerformatierung ändern soll mit Strg+a und dann drücke Strg+K+F. Damit formatierst Du Deinen Code gleich in deine neue Klammerformatierung. Das ganze funktioniert dann natürlich auch für die neu generierten Klassen.

Zu Deinem zweiten Punkt, möchte ich Dich auf ein sehr gutes Tutorial in meinem Heimatforum verweisen: Bakterienkultur/Forum. Es ist nicht so ganz einfach was die richtige Vorgehensweise bei der Versionierung angeht. Das was das Studio aber mit jedem Build automatisch generiert, das kannst Du eh nicht beeinflussen.

HTH

TOM_MUE

20.07.2005 - 09:23 Uhr

Hallo homer Jay,

Zu Punkt 1: Tja, die Visual Studio .NET 2003 Setup Projekte, bieten aber momentan noch keine andere Möglichkeit zur Deinstallation als den Standardweg über die Systemsteuerung. Ich pers. finde diesen Weg auch sehr gut denn über dieses Softwere Center kann der Benutzer sich mehr Informationen über das Programm holen (diese sind wiederum alle im Setupprojekt einstellbar) als er über eine blose Deinstallverknüpfung im Programmordner bekommen kann. Du kannst sogar das Icon im Setupprojekt für diesen Eintrag festlegen.

Zu Punkt 2: Es gibt in jedes Setupprojekt einen Registry-Editor. (Setupprojekt-Item im Solutionexplorer-->Kontextmenu-->View-->Registry) Dort kannst Du alle Schlüssel eintragen die für Dein Programm von Nöten sind. Dieser Weg sollte immer benutzt werden, den dann kümmert sich das Setup beim Deinstallieren auch um das Aufräumen der Schlüssel. Wir wollen doch mal nicht die Registry zumüllen ;-=)

HTH

TOM_MUE

20.07.2005 - 09:08 Uhr

Hi yahoo,

mit dem UI-Startmodus meinte ich die Befehele für VS .NET 2003, die man über die Konsole angeben kann. So startet man VS .NET 2003 mit den Befehlen

/mditabs -->use tabbed documents interface
/mdi -->use MDI interface
/fn -->use specified font name
/fs -->use specified font size

(immer mit devenv vorangestellt) in unterschiedlichen Ansichten. Für Dich denke ich mal wäre vielleicht der Befehl:

/safemode -->only default environment and services load for stability

der richtige. Schalte aber auch mal alle Add-Ins (Tools-->Add-in Manager) im VS.NET ab. Dann kannst Du auch feststellen ob es vielleicht an einem Add-in liegt und dieses vielleicht einen Bug enthält. Nach dem Abschalten der Add-Ins, nutze auf jeden Fall nochmal den "devenv /setup" Befehl. Damit wird nochmal die IDE in den Anfangszustand versetzt.

HTH

TOM_MUE

19.07.2005 - 16:49 Uhr

Hallo yahoo,

schau doch mal nach ob du diesen schlüssel in deiner registry findest:

"{3AE79031-E1BC-11D0-8F78-00A0C9110057}".

Das ist die GUID für den Solutionexplorer. Hast Du vielleicht den UIStartModus geändert? Also ob VS 2003 mit MDI-Fenstern etc. starten soll oder nicht.

Gruß

TOM_MUE

19.07.2005 - 14:46 Uhr

Hallo yahoo,

schließ doch mal alle Deine Visual Studio Instanzen und öffne die "Visual Studio .NET 2003 Command Prombt" (liegt bei den Visual Studio Tools). Dann gib einfach mal "devenv /setup" (Ohne Hochkomma) ein. Damit wird ein Setup der Visual Studio IDE durchgeführt welches nur wehnige Sec. dauert. Danach sollte der default Zustand wieder eingestellt sein.

ACHTUNG: Wenn Du Dir eigene Commandos über den Editiermodus der Toolbar erstellt hast, werden diese mit dem oben genannten Befehl wieder gelöscht. Auch alle AddIns werden in den ComandPreload Zustand des ersten Aufrufs versetzt, sind aber nicht gelöscht.

Für diesen Tip übernehme ich keine Haftung!

HTH

TOM_MUE

19.07.2005 - 10:37 Uhr

Hast Du mal nachgesehen ob bei Dir der "ProjectTemplateCach" existiert?

TOM_MUE

19.07.2005 - 10:35 Uhr

Hi Klaus1,

schau Dir doch mal die Thread-Klassen etwas genauer (wenn du eigene erstellst) an. Da gibt es so schöne Properties wie Name oder ID oder ThreadNumber etc. Daran kann man THreads identifizieren. Über das Threadfenster im Debugger des VS 2003 kannst Du doch auch direkt in die Threads reinspringen oder Du kannst sie sogar einfrieren(ist mit Vorsicht zu genießen). Wann wo wie Deine Threads aufgerufen werden die in Deiner Applikation implementiert sind, solltest Du als Ersteller des Programms am ehesten wissen, noch vor dem Studio!! Anderfalls wird aus Deiner Anwendung schnell eine Thread-Schießbude 😉

Das wird jetzt aber auch OT(hat ja nix mehr mit dem ToolWindow der Threads im VS 2003 zu tun).

Gruß

TOM_MUE

18.07.2005 - 20:16 Uhr

Hallo Noodles,

nein ich meinte nicht welche Build du hast, sondern die Visual Studio Version. Also "Tem Suite" oder "Standard" oder "Profesional" oder die "Express X". Ich habe die TeamSuite und die Professional laufen und in beiden Versionen gibt es das Projekttemplate "WindowsService". Hast Du es aus versehen gelöscht? Zum Glück ist man bei MS so schlau gewesen und hat ein "ProjectTemplateCach" angelegt. Darin findest Du alle Vorlagen. Dieser befindet sich unter:

Drive:[Applicationfolder]\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplatesCach\

Bin mir nicht sicher ob das Template "WindowsService" in der Standardversion schon gibt.

HTH

TOM_MUE

18.07.2005 - 19:40 Uhr

Hi Noodles,

welche Version von VS 2005 hast Du denn Installiert?

Gruß

TOM_MUE

18.07.2005 - 19:38 Uhr

Hallo klaus1,

Wenn Du Dich im Debugmodus befindest und du an einem Breakpoint in Deiner Application stehst, gehe volgenden Weg um die Threads zu sehen

DEBUG --> WINDOWS --> Threads (Ctrl+Alt+H)

Und schon kannst Du Deine Threads sehen und durch einen Doppelklick reinswitchen.

HTH

TOM_MUE

13.07.2005 - 11:58 Uhr

Ich denke mal das Du Diene Datei im XML-Editor öffnen möchtest. Füge Deine Datei dem Projekt hinzu, wähle dann über das Kontextmenu der Datei im Solutionexplorer "open with..." aus und selectiere erst mal den Editor mit dem Du die Datei öffnen willst. Drück dann den Knopf "set as Default" und dann "Open".

HTH

TOM_MUE

07.06.2005 - 11:32 Uhr

Hallo,

ich breuchte mal die Hilfe von dem berümten Schlauch auf dem man sich manchmal befindet.

OK, wenn cih in Visual Studio .NET einem WindowsForm eine TextBox hinzufüge und deren Dock- EIgenschaft auf Top setze, pflanzt sie sich ja schön an die Obere Kante des Forms. Füge ich auf diese Art und Weise weitere TextBoxen dem Form hinzu, pflanzt sich jede weitere TextBox unter die erste TextBox auch wenn der DockStyle jeder weiteren TextBox ebenfalls auf Top gesetzt wurde.

Das ist auch genau das was ich Programmatisch erreichen will. hier mal ein Stück Code:


//...

private void button1_Click_1(object sender, System.EventArgs e)
{
			TextBox l_TextBox = null;

			l_TextBox = new TextBox();

			l_TextBox.Dock = DockStyle.Top;

			l_TextBox.Name = new ProgrammID().ID.ToString();

			l_TextBox.Text = l_TextBox.Name;			

			this.groupBox2.Controls.Add(l_TextBox);

			this.propertyGrid1.SelectedObject = l_TextBox;
	}

//...

public class ProgrammID
{
	private static int m_ID = 0;

	public object ID
	{
		get
		{
		return m_ID ++;
		}
	}
}

Leider erreiche ich auf diese Art und Weise nicht das gewünschte Ergebniss wie im Designer des Visual Studio. Mit diesem Code der dynamisch die Textboxen hinzufügt, wird jede neue TextBox über die vorher hinzugefügte Textbox angeordnet. Wie kann ich das im Code abändern? Ich würde gern jede neue TextBox unter die zu letzt hinzugefügte TextBox andocken.

Vielen Dank

TOM_MUE

02.06.2005 - 08:59 Uhr

Erstelle Dir mit Visual Studio ein ( z.B. C#) ClassLibrary- Project. Lass es einfach leer und erstelle die DLL (Build). Dann schließe die Solution und öffne die erstelle DLL mit Visual Studio ( FILE --> OPEN --> FILE ) Darauf hin öffnet sich ein DLL- Editor mit einem Tree der den Inhalt der DLL anzeigt. Klick mit der rechten Maustaste auf die oberste Ebene und wähle da "Add Resource...". Damit öffnest Du einen Dialog der Dir die Möglichkeit gibt Bitmaps oder ander Dateitypen hinzuzufügen.

HTH

TOM_MUE

30.05.2005 - 15:36 Uhr

Hallo Programmierhans,

leider ist das auch nicht die richtige Lösung. Diese Version hatte ich auch schon probiert und das Ergebniss ist der Pfad zu dem Projekt in dem ich die DLL erstellt habe von der ich den INstallationspfad suche. Trotzdem Danke für Deine schnelle Antwort.

Gruß

TOM_MUE

30.05.2005 - 14:55 Uhr

ich habe für VS 2003 ein Add-In geschrieben. in dem Add-in referenziere ich
eine weitere DLL die im selben Installationsverzeichnis liegt wie die Add-In
DLL. Nun möchte ich zur Laufzeit (nach der Installation) per Reflection gerne den Installationspfad
der zweiten DLL herausbekommen (dieser kann ja unterschiedlich sein). Dabei habe ich schon viele Versionen probiert aber keine hat mir den richtigen Pfad geliefert. Entweder bekomme ich den INstallationspfad von VS2003 ode rich bekomme den Pfad des Projektes, das ich gerade mit VS2003 lade. Ich habe es auch schon hinbekommen das ich den Pfad zu dem Projekt bekomme in dem ich die DLL erstellt habe. (Assembly.GetExecutingAssembly().Location /
this.GetType().Assembly.Location). Alles liefert nicht den Installationspfad.

Vielen Dank für jede Hilfe

Beste Grüße

TOM_MUE

25.05.2005 - 09:34 Uhr

hallo @Xqgene,

also nach meinem Wissensstand ist über den legalen Weg und MSDN Subscription die 4074 die einzige Longhorn Version die momentan zum Download angeboten wird. Die WINHEC 2005 Version wurde nur an Besucher verteilt und das auch nur in der Build version 5048. Erst sollte auch diese zum Download per MSDN Subscription angeboten werden aber nun hat man sich wohl entschieden das nicht zu tun. Schade eigentlich. Aber so lange wird es bis zur ersten BETA nun nicht mehr dauern.

Mal ganz neben bei gefragt: Warum willst Du Dir das antun und eine BETA Entwicklungsumgebung auf eine Alpha BS- Version spielen? Indigo und Avalon sind doch nun in einer fast RC Version zum Download angeboten wurde und das ohne MSDN Subscription. Beides kann man mit der BETA 2 von VS2005 auf WinXP aufspielen und testen.

Muss aber zugeben das wenn ich die Build 5060 in die Hände bekommen hätte, sie auch installieren würde, auch wenn nur auf einem VPC. 😉

Beste Grüße TOM_MUE

24.05.2005 - 16:41 Uhr

@Xqgene

welchen Build von Longhorn hast Du denn installiert? Ich habe bei uns in der Firma erfahren das es selbst bei der 5048 nicht möglich ist zusätzliche Programme zu installieren.

Gruß

TOM_MUE