Laden...
Avatar #avatar-3271.jpg
rollerfreak2 myCSharp.de - Member
Software Architekt Dabei seit 14.07.2008 916 Beiträge
Benutzerbeschreibung
Man lernt nie aus...

Forenbeiträge von rollerfreak2 Ingesamt 916 Beiträge

23.04.2015 - 08:53 Uhr

Das ist falsch, parso hat vom FixtureSetup geschrieben das ist in der Tat nicht ausreichend. Aber auf der Seite war es unten mit als Unterlink aufgeführt den ich wohl übersehen habe.
Das von mir gepostete ist ein SetUp Attribute und erfüllt genau das was ich brauche, zwar mit ein paar unschönen Randbedingungen aber taugt trotzdem!

Edit: Ich nehme alles zurück. Die Doku von den Attributen ist irreführend bzw. verwirren sie zumindest mich. DAs SetUp Attribute ist das falsche weil das für jeden Test im Fixture gerufen wird. Das SetupFixture Attribut kann dazu benutzt werden.

This is the attribute that marks a class that contains the one-time setup or teardown methods for all the test fixtures under a given namespace. The class may contain at most one method marked with the SetUpAttribute and one method marked with the TearDownAttribute.

There are a few restrictions on a class that is used as a setup fixture.

* It must be a publicly exported type or NUnit will not see it.
* It must have a default constructor or NUnit will not be able to construct it.

Sorry für die Missverständnisse ich versuch das jetzt mal so.

20.04.2015 - 16:23 Uhr

Ich glaub das hier sieht vielversprechend aus Setup/TearDown Attribute.

15.04.2015 - 14:15 Uhr

Mir fällt ja nicht mal eine umständliche Lösung ein, wenn du eine hast dann wäre ich dir Dankbar wenn du sie mir mitteilst.

15.04.2015 - 07:56 Uhr

In dem Fall hast du recht, wir missbrauchen das Framework für Integrationstests. Ändert aber nichts an meinem Problem 😦

14.04.2015 - 09:15 Uhr

@Mabo: Die Tests sind in sich abgeschlossen, aber dadurch eben langsam (In unserem Fall). Daher die versuchte Optimierung.

Es gibt via Addin die Möglichkeit, sich in den TestRunStarted und TestRunFinished zu hängen, jedoch gibt es diese Möglichkeit nicht als Attribut. Warum das so ist bleibt das Geheimnis der NUnit Entwickler.

13.04.2015 - 15:14 Uhr

Und in wieweit soll mir das helfen? Die Attrbiute sind mir doch längst bekannt nützen aber nichts, denn ich brauche einen Call vor dem gesamten Lauf und nach dem gesamten lauf.

02.04.2015 - 13:31 Uhr

Wir lassen verschiedene TestFixtures innerhalb eines Assemblies laufen. Was wir wollen ist nicht für jedes Fixture das unterliegende Framework zu initialisieren und im FixtureTearDown zu Disposen. Wir wollen das Ganze einmal pro Lauf. Jetzt könnte ich mich zwar auf das AppDomain.CurrentDomain.ProcessExit hängen um dort zu Disposen, das löst aber nicht alle Probleme.

Das Initialisieren des Frameworks muss zwingend immer vom gleichen Thread accessed werden (Das kann ich leider nicht ändern). Das geht so lange ich einen gesamten Lauf für sich betrachte. Startet aber jemand ein einzelnes Fixture, z.B. via UI und anschließend ein weiteres, dann knallt es beim 2ten weil das Fixture in einem neuen TestRunner der in einem neuen Thread läuft ausgeführt wird. Ich habe schon versucht das zu unterbinden aber keine Lösung gefunden. Was mir eigentlich fehlt ist ein Event/Attribute ala der TestLauf ist beendet. Dort kann ich dann einfach Dispose vom Framework aufrufen. Oder aber der TestRunner wird immer mit dem gleichen Thread erzeugt solange die NUnit Instanz die gleiche ist.

Bin für jede Info Dankbar.

Edit: Die Möglichkeit IAddin zu implementieren ist nicht praktikabel weil die Tests in verschiedenen Umgebungen ausgeführt werden, die das unter Umständen nicht unterstützen.

07.01.2015 - 12:40 Uhr

Hab das Problem jetzt gefunden. Das Resolve wird halt nicht direkt sondern indirekt gerufen.

Wenn man den nested Type der vom Compiler erzeugt wird mit analysiert, dann findet man in der MoveNext Implementierung den Resolve Aufruf. (IL_0026)


.method private hidebysig newslot virtual final 
        instance bool  MoveNext() cil managed
{
  .override [mscorlib]System.Collections.IEnumerator::MoveNext
  // Code size       78 (0x4e)
  .maxstack  2
  .locals init ([0] bool CS$1$0000,
           [1] int32 CS$4$0001)
  IL_0000:  ldarg.0
  IL_0001:  ldfld      int32 OpCode.Program/'<GetInterfaces>d__0'::'<>1__state'
  IL_0006:  stloc.1
  IL_0007:  ldloc.1
  IL_0008:  switch     ( 
                        IL_0019,
                        IL_0017)
  IL_0015:  br.s       IL_001b
  IL_0017:  br.s       IL_0040
  IL_0019:  br.s       IL_001d
  IL_001b:  br.s       IL_0048
  IL_001d:  ldarg.0
  IL_001e:  ldc.i4.m1
  IL_001f:  stfld      int32 OpCode.Program/'<GetInterfaces>d__0'::'<>1__state'
  IL_0024:  nop
  IL_0025:  ldarg.0
  IL_0026:  call       object OpCode.Program::Resolve()
  IL_002b:  newobj     instance void OpCode.Interface::.ctor(object)
  IL_0030:  stfld      class OpCode.IInterface OpCode.Program/'<GetInterfaces>d__0'::'<>2__current'
  IL_0035:  ldarg.0
  IL_0036:  ldc.i4.1
  IL_0037:  stfld      int32 OpCode.Program/'<GetInterfaces>d__0'::'<>1__state'
  IL_003c:  ldc.i4.1
  IL_003d:  stloc.0
  IL_003e:  br.s       IL_004c
  IL_0040:  ldarg.0
  IL_0041:  ldc.i4.m1
  IL_0042:  stfld      int32 OpCode.Program/'<GetInterfaces>d__0'::'<>1__state'
  IL_0047:  nop
  IL_0048:  ldc.i4.0
  IL_0049:  stloc.0
  IL_004a:  br.s       IL_004c
  IL_004c:  ldloc.0
  IL_004d:  ret
} // end of method '<GetInterfaces>d__0'::MoveNext

07.01.2015 - 10:34 Uhr

Hi herbivore,

das hab ich auch erst gedacht. Aber selbst wenn ich im Main das Foo rufe um das Enumerable auszuführen sieht der IL identisch aus.


public static void Main(string[] args)
{
    foreach (var itf in GetInterfaces())
    {
        itf.Foo();
    }
}


.method public hidebysig static class [mscorlib]System.Collections.Generic.IEnumerable`1<class OpCode.IInterface> 
        GetInterfaces() cil managed
{
  // Code size       14 (0xe)
  .maxstack  1
  .locals init ([0] class OpCode.Program/'<GetInterfaces>d__0' V_0,
           [1] class [mscorlib]System.Collections.Generic.IEnumerable`1<class OpCode.IInterface> V_1)
  IL_0000:  ldc.i4.s   -2
  IL_0002:  newobj     instance void OpCode.Program/'<GetInterfaces>d__0'::.ctor(int32)
  IL_0007:  stloc.0
  IL_0008:  ldloc.0
  IL_0009:  stloc.1
  IL_000a:  br.s       IL_000c
  IL_000c:  ldloc.1
  IL_000d:  ret
} // end of method Program::GetInterfaces

07.01.2015 - 10:14 Uhr

Ich habe ein Problem mit einer eigenen FxCop Regel. Ich möchte alle Methoden Aufrufe analysieren und dabei werden nicht alle aufgelöst. Speziell die innerhalb eines "yield return" werden nicht aufgelöst. Gegeben ist exemplarisch folgendes:


public interface IInterface
{
    void Foo();
}

internal class Interface : IInterface
{
    private readonly object m_Obj;

    public Interface(object obj)
    {
        m_Obj = obj;
    }

    public void Foo()
    {
        throw new NotImplementedException();
    }
}

class Program
{
    static void Main(string[] args)
    {
        var interfaces = GetInterfaces();
    }

    private static IEnumerable<IInterface> GetInterfaces()
    {
        yield return new Interface(Resolve());
    }

    private static object Resolve()
    {
        return new object();
    }
}

Worum es mir geht ist der Methoden Call von Resolve() innerhalb des yield return. Der IL Code sieht so aus:


.method private hidebysig static class [mscorlib]System.Collections.Generic.IEnumerable`1<class OpCode.IInterface> 
        GetInterfaces() cil managed
{
  // Code size       14 (0xe)
  .maxstack  1
  .locals init ([0] class OpCode.Program/'<GetInterfaces>d__0' V_0,
           [1] class [mscorlib]System.Collections.Generic.IEnumerable`1<class OpCode.IInterface> V_1)
  IL_0000:  ldc.i4.s   -2
  IL_0002:  newobj     instance void OpCode.Program/'<GetInterfaces>d__0'::.ctor(int32)
  IL_0007:  stloc.0
  IL_0008:  ldloc.0
  IL_0009:  stloc.1
  IL_000a:  br.s       IL_000c
  IL_000c:  ldloc.1
  IL_000d:  ret
} // end of method Program::GetInterfaces

Im FxCop hab ich schon mehreres Versucht. Es wird für die Rückgabe ein Compile Generiertes Object zurück gegeben. Soweit so klar. Aber ich komme einfach nicht an den MethodCall vom Resolve() ran.


...
Visit(method.Body);
foreach (InstanceInitializer instanceInitializer in method.Instructions().Select(t => t.Value).OfType<InstanceInitializer>())
{
    Visit(instanceInitializer.Body);
}
...

Weiß einer wie ich wirklich an ALLE Methodenaufrufe heran komme? Gleiches Problem wird sicherlich auch bei Lamda's auftauchen.

03.11.2014 - 15:56 Uhr

Diese Frage kann man, ohne zu wissen wann intern das MyEvent gefeuert wird, nicht beantworten.

03.11.2014 - 15:15 Uhr

Wenn das ein und die selbe Instanz von Class ist dann bringt dir das nichts, weil dann immer alle angemeldeten Events gefeuert werden.

03.11.2014 - 14:28 Uhr

Die userId wird in deinem Fall Lamda immer userId == 123 sein. So wird es also nicht funktionieren.
Du müsstest die userId im Lamda irgendwie vom WebRequest ermitteln.

19.12.2013 - 09:57 Uhr

Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit alle Änderungen an einem Source Item auf einem beliebigen Child Branch zu ermitteln. Gegeben ist z.B. folgende Branch Hierarchie.


         A
        / \
       B   C
          /  \
         E    D

Wenn ich nun eine Item in der Hand habe z.B. $D\file.cs und mir dann mit Query History alle Changesets dieses Items hole bekomme ich leider nur die Changesets von diesem Branch, nicht jedoch die Änderungen auf E,C,A und B.


var changes = m_Version.QueryHistory(@"$D:\File.cs", VersionSpec.Latest, 0, RecursionType.Full, null, new ChangesetVersionSpec(1), VersionSpec.Latest, int.MaxValue, true, false);

Ich hab jetzt schon einiges versucht mit TrackMerge und QueryMerge jedoch ist die TFS API Doku nicht gerade hilfreich. Wichtig ist das ich eine Lösung brauche die Branch unabhängig ist, daher die Branch Hierarchie ist mir unbekannt. Weiß einer einen performanten Weg dies zu erreichen?

18.12.2013 - 10:07 Uhr

Das klingt gut, ich schau mal ob der Resharper es mit interpretiert.

Edit: Klappt wunderbar. Danke

17.12.2013 - 12:51 Uhr

Hi zusammen,

kennt einer von euch ein Attribute das man an eine Methode/Property/Field schreiben kann um dem Resharper zu sagen das dieser Member keine direkte Referenzierung hat jedoch via Reflection gecalled wird?

13.12.2013 - 11:57 Uhr

Ich hab einen guten Artikel gefunden und probiere das ganze jetzt mal aus.

Code Project

13.12.2013 - 10:12 Uhr

Hi zusammen,

ich such nach einem Event auf das ich micht anmelden kann damit ich notifiziert werde wenn sich die Netzwerkverbindung getrennt hat.

Connected->Unconnected
Unconnected->Connected

Versucht habe ich schon NetworkChange.NetworkAvailabilityChanged.
Das wurde jedoch nicht gefeuert, weder wenn ich das Netzkabel ziehe noch wenn ich die Schnittstelle deaktiviere.

BTW: Ich würde nur ungern auf die Netzwerkverbindung pollen.

Hat einer von euch einen Tipp für mich?

18.10.2013 - 19:19 Uhr

Habs jetzt gelöst. Einfach das DTE object vom laufenden Prozess holen und der Rest ist dann geschenkt.

How do I get the DTE for running Visual Studio instance?

18.10.2013 - 13:06 Uhr

Ich rede von *.cs Dateien. Ich glaube du hast mich falsch verstanden. In meinem Tool soll man eine selektiertes Source File in einer aktiven VS Instanz öffnen können.

18.10.2013 - 12:45 Uhr

Hallo zusammen,

weiß einer eine einfache Möglichkeit von außerhalb der IDE (VS2010/VS2012) eine Datei innerhalb einer Instanz davon zu öffnen?

Es geht darum das ich ein Tool habe und von dort aus möchte ich ein bestimmtes File in einem aktiven VS öffnen.

Danke im voraus.

02.09.2013 - 20:47 Uhr

Jo alternativ weiß ich schon wie ich das bastelt kann. Mir ging es nur um eine mögliche reine Linq Lösung.

02.09.2013 - 20:01 Uhr

Hi zusammen,

ich stehe grad ein bisschen auf dem Schlauch. Ich glaube zwar das es out of the Box mit Linq so nicht geht aber vielleicht übersehe ich irgendwas.

Gegeben:
List:
1)Element : BaseElement
2)Element : BaseElement
3)OtherElement : BaseElement
4)Element : BaseElement
5)OtherElement : BaseElement
6)Element : BaseElement
7)Element : BaseElement

Was ich haben will ist:
IEnumerable<IEnumerable<Element>>

Wie ich das einmal bekomme ist klar:


list.SkipWhile(t => !(t is Element)).TakeWhile(x => x is Element);

Aber wie kann ich mit Hilfe von LINQ Multiple Partions machen?

06.03.2013 - 21:00 Uhr

Hi zusammen,

ich suche eine kleines Beispielprogramm für Dokumentationszwecke an denen man Mocking Tests (Rhino) beispielhaft aufzeigen kann. Ich dachte da so an 10-15 Klassen die nach Möglichkeit SOLID entwickelt wurden und ein bisschen miteinander interagieren. Hat einer eine Idee wo ich da etwas einfaches und verständliches finden kann?

Danke im voraus!

22.01.2013 - 08:23 Uhr

Entweder parallel zu der zu ladenden oder sie ist im GAC registriert. System Assemblies werden automatisch aufgelöst!

18.01.2013 - 08:30 Uhr

Das habe ich doch bereits schon mehrmals gemacht. Allerdings erhalte ich nie unused Methods. Auch in den Settings wie oben der dialog zeigt habe ich unter unused nur 4 Sachen gefunden die alle nicht das erwünschte ergeben!

17.01.2013 - 14:50 Uhr

Auf diesen Link bin ich auch schon gestoßen!

First enable "Analyze Errors In Solution" (right-click on the Resharper icon in the status bar)

Es gibt bei mir ein Resharper Icon in der Statusbar. Und das Analyze Errors in Solution habe ich auch nirgend gefunden.

Edit: Habs jetzt in den Settings gefunden. Hab es mal angeschalten und schau mal ob jetzt nicht verwendete Interface Methoden von (internal deklariert) gefunden werden!

17.01.2013 - 13:36 Uhr

Unused code/methods ist dort leider nicht einstellbar.

17.01.2013 - 12:59 Uhr

Hi Console32,

hab den neusten Resharper (7.1.1) drauf aber leider keine Lasche "unused Code" in dem Analyzing Result. Ich habe nur die folgenden:
Common Practices and Code Improvements
Compiler Warnings
Constrains Violations
Language Usage Opportunities
Potential Code Quality Issues
Redundancies in Code
Redundancies in Symbol Declarations

Kann man das noch irgendwo anschalten? Es sind in der analisierten Solution definitiv unbenutze Codestellen.

17.01.2013 - 09:01 Uhr

Hi zusammen,

es gibt ja im Resharper das Find usage um z.B calls auf Methoden zu finden. Dann sucht der Resharper innerhalb der gesamten Solution nach Aufrufen dieser Methode. Das ist ein nettes Feature.

Ich bräuchte das aber für jede Methode an jedem Interface das in der Solution definiert ist. Und davon hätte ich gern alle Methoden die überhaupt nicht gerufen werden. (Die könnte ich dann nämlich löschen weil alle potentiellen Aufrufer innerhalb der gesamten Solution definiert sind).

Eventuell kennt einer ein VS2010 Plugin oder Resharper Plugin oder sogar ein Refector Plugin das mich bei diesem Prozess unterstützen kann.

Danke im voraus!

09.01.2013 - 10:50 Uhr

Danke euch!

09.01.2013 - 10:01 Uhr

Hallo zusammen,

ich habe eine allgemeine Frage bezüglich der .Net User Settings. Angenommen ich habe eine UI in der der User einige Settings vornehmen kann. Einige davon bündel ich in einem String und habe dafür einen Converter (in beide Richtungen). Wenn ich jetzt das Tool mit V1.0.0.0 ausliefere und der User ändert dieses Setting konsistent dann wird es bei ihm auf dem Rechner gespeichert. Bei jedem weiteren Start hat der User seine gespeicherten Settings. So weit so klar. Wenn ich nun was an der Ablage ändere bzw. die UI erweitere und eine neue Version raus veröffentliche z.B. V1.0.1.0 kann es dann bei dem User zu einen Absturz zur Laufzeit kommen weil der Converter für die Settings sich geändert hat? Oder sind die Settings Versionsabhängig?

Im Fall die Settings bleiben auch über Versionen auf dem Zielrechner erhalten kann ich die irgendwie löschen oder aber eine Versionsnummer innerhalb des Settings Files hoch zählen sodass .Net selber erkennt das es die Default Settings laden muss?

Vielen Dank im voraus!

27.10.2012 - 12:42 Uhr

Hi weimat,

schau mal ob NDoc das richtige für dich ist. Ansonsten schau mal in die Sandcastle Docu.

22.10.2012 - 20:24 Uhr

Hallo gfoidl

danke für die Infos!

Grüße rollerfreak2

22.10.2012 - 17:40 Uhr

Hi zusammen,

vielleicht weiß das einer von euch. Gibt es einen Trick wenn ich im VS2010 mit dem Stackpointer hinter dem return (...) stehe den Wert anzeigen zu lassen der dann auf den Stack gepushed wird? Ich weiß ich könnte zwar in das WatchWindow die Methode so aufrufen und dann den Wert checken aber es gibt doch sicherlich einen komfortableren Weg!?

Danke vorab!

18.10.2012 - 18:17 Uhr

Doch, denn du versuchst hier einen short in einen IConvertible zu casten, und das geht eben nicht.
Es wird hier nicht noch irgendeine Funktion aufgerufen, sondern der im code stehende feste cast macht die Exception.

Das ist nicht richtig! Int16 implementiert definiv IConvertible. Du kannst auch gern folgenden Code nehmen der erzeugt ebenfalls oben beschriebene Exception!


//das geht definitv
IConvertible convertible = (IConvertible)((System.Int16)5);
//das hier erzeugt oben beschrieben Exception
object obj = Convert.ChangeType((System.Int16)5, typeof(IConvertible));

Aus meiner Sicht also ein Fehler vom Framework zumindest stimmt die Exception nicht!

Auch wenn du die frage nicht hören willst, wozu soll das ganze denn dienen?

Wir haben eine Klasse die hat eine T GetValue<T>() Methode. Diese nutzt intern Convert.ChangeType je nachdem was T halt ist. Wenn man nun folgendes macht dann geht das nicht:


IConvertible convertible = member.GetValue<IConvertible>();

Das wiederum geht:


//hier kommt dann ein Int (default) zurück
IConvertible convertible = (IConvertible)member.GetValue<object>();

Die zweite Schreibweise ist aber a.M.S Quatsch, dient halt nur dazu die Exception zu umgehen!

18.10.2012 - 15:36 Uhr

Hi,

ich habe was interessantes entdeckt und wollte euch mal Fragen ob das Verhalten so gewollt oder eher ein Fehler ist. Vorab der Code scheint so wie ich ihn jetzt schreibe sinnfrei, aber in unserem Fall ergibt das schon Sinn weil wir eine Methode haben die an einem T DataMember.GetValue<T>() implementiert. Im GetValue wird dann in verschiedenen Arten Convert.ChangeType(object, Type) aufgerufen.


IConvertible convertible = (IConvertible)Convert.ChangeType((long)5, typeof(object));
object obj = Convert.ChangeType((IConvertible)5, typeof(IConvertible));

Die erste Zeile geht zur Laufzeit aber die 2te wirft eine Exception die folgend lautet.

Fehlermeldung:
Invalid cast from 'System.Int32' to 'System.IConvertible'.

Die Meldung ist natürlich so nicht richtig und ich bin mal auf die Suche gegangen! Also im ChangeType wird das short in IConvertible gecastet und dann ganz unten wird return convertible.ToType(conversionType, provider); gerufen. Das wiederum geht dann auf object IConvertible.ToType(Type type, IFormatProvider provider)
das dann wiederrum Convert.DefaultToType(this, type, provider); called.

Nun steht in dieser Method oben die Abfrage


internal static object DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
{
    if (targetType == null)
    {
        throw new ArgumentNullException("targetType");
    }
    if (value.GetType() == targetType)
    {
        return value;
    }
.....
.....
throw new InvalidCastException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("InvalidCast_FromTo"), new object[] { value.GetType().FullName, targetType.FullName }));

Die Abfrage value.GetType() == targetType liefert natürlich false weil GetType() short bzw. Int16 zurücl liefert. Aus meiner Sicht ist dort ein Fehler weil die Abfrage prüfen müsste ob der Typ von dem value.GetType() implementiert wird.

Also Fehler oder gewolltest Verhalten! In der MSDN steht zu der InvalidCastException nur folgendes:

This conversion is not supported.

-or-

value is null and conversionType is a value type.

-or-

value does not implement the IConvertible interface.

27.09.2012 - 09:43 Uhr

Hi zusammen,

wir in unseren Projekt haben ein kleines Workflow Problem mit Gated Checkins und dem TFS. Ich erklär mal kurz ein Scenario bei dem wir immer (logischer weise) Automerge Konflikte bekommen. Vielleicht habt ihr eine Idee wir man sowas "automatisiert" in den Griff bekommen kann.

Entwickler A:
Projekt A.csproj
-> Add class1.cs
-> Add class2.cs
-> Remove class3.cs
-> Edit ....
-> Edit ....
-> Edit ....

Jetzt Checked er es auf den Agend als Gated Checkin ein und der Job kommt in die Queue. Nehmen wir mal an die ist leer d.h. er ist als erster dran!

Entwickler B:
Projekt A.csproj
-> Add class4.cs
-> Add class5.cs
-> Remove class8.cs
-> Edit ....
-> Edit ....
-> Edit ....

Jetzt Checked er es auch ein und der Job steht auf wait weil der erste Gated Checkin noch läuft. Bei Entwickler B hat auch alles lokal gebaut und alles Tests waren grün. Wenn der 1te Gated Checkin jetzt drin ist und der 2te beginnt dann kommt es auf dem Agend zum Merge Konflikt weil er mittlerweile A.csproj nicht mehr Auto mergen kann!

Solche Scenarien haben wir häufig und derzeit können wir sowas nur unterbinden wenn wir uns selber "synchonisieren". Unser Team ist aber sehr groß und deswegen ist das nicht ganz so leicht.

Deswegen hat einer von euch eine Idee wie man sowas im Prozess unterbinden kann bzw. sogar im TFS im vorhinein abfangen kann? Z.b. die GatedCheckins mit dem laufenden zu validieren etc.

Danke im voraus!

19.09.2012 - 10:47 Uhr

Hi zusammen,

ich muss **alle ** Kommentare eines C# Source Files analysieren. Ich weiß das ich das recht schnell mit einem Regex implementieren kann. Ich denke aber es gibt sicher einen Parser der das für mich übernimmt und mir anschließend die Möglichkeit gibt über die Kommentare zu iterieren.

Kennt einer von euch so einen Parser der genau das macht?

14.09.2012 - 21:38 Uhr

Hi,

ich suche ein TabControl das so ähnlich funktioniert wie das beim IE8 bzw. Firefox. Hab auch CodeProject leider nichtg passendes gefunden. Man kann sowas zwar auch selber implementieren jedoch wollte ich mal fragen vielleicht gibt es sowas ja schon.

Edit: Hab ein ganz brauchbares gefunden! FireFox-like Tab Control

12.09.2012 - 12:08 Uhr

Sieht so aus, ich hätte halt gedacht es gebe irgend ein Systemevent oder ähnliches um das zu checken. Dann werde ich wohl auf die besagten Conditions checken müssen!

12.09.2012 - 11:54 Uhr

Naja ich empfand das als einfacher als zu prüfen ob der TFS Service bzw. ein TFS Server erreichbar ist sowie ein Netzlaufwerk. Und beide Eigenschaften sind halt erfültt wenn das Windows follständig geladen ist, zumindets auf den Rechnern wo die Application installiert werden soll!

12.09.2012 - 11:35 Uhr

Hallo zusammen,

gibt es irgendeine Möglichkeit bei Start einer Application (liegt im Autostart) festzustellen ob Windows mit dem Bootvogang fertig ist? Würde halt ungern einen Timer einbauen der einfach 2 Minuten wartet.

Eventuell kann man irgendwie die Priorität der Autorun in der Registry beeinflussen? Hab dazu aber bis jetzt nichts gefunden!

Der Key liegt bei: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

10.09.2012 - 22:29 Uhr

Ich kann es ja mal versuchen zu erklären. Hat etwas mit JumpList CustomCategory Listenverwaltung zu tun. Ich habe eine JumpList (JL) (WindowsCodePackAPI) welche in der ich CustomCategories (CG) anzeige. Die verwalte ich selber in einer XML Datei. Das heißt ich checke ob ein Element neu hinzugekommen ist und trage es in die XML ein (mit IconPath,Argument, etc.). Das funktioniert auch wunderbar. Das Problem ist jetzt wenn ein User ein Element aus der JL via Rechtsklick entfernt. Wenn dann das Tool wieder gestartet wird dann habe ich zwar in der JL.RemovedDestinations ein Element drin aber der String ist null! Ich muss das Element nämlich aus meiner XML entfernen sonst spinnt die JL rum. Wenn ich einfach wieder alle Elemente der JL hinzufüge dann werden gar keine mehr angezeigt.

Meine 2te Idee war jetzt folgende. Nehmen wir mal an ich habe 2 CG mit jeweils einem Element also E1 und E2 in der XML. Jetzt entfernt der User E1 aus der JL. Nun startet er das Tool wieder mit E2. Zu beginn melde ich mich am ItemRemove Event an und füge einfach alle Element der JL hinzu die ich in der XML finde. Also E1 und E2. Dann rufe ich Refresh auf. Nun bekomme ich für ein Element (E1) ein Item Remove Event wo mir der Pfad des JumpListLink mitgegeben wird was der User entfernt hatte (E1). Problem nur ist das natürlich alle Element den selben Pfad haben nämlich dem zum Tool. Ich bräuchte die Argument mitgeliefert dann könnte ich das richtige Element bzw. Elemente aus der XML entfernen. Anschließend noch mal alle Element nach dem 1ten Refresh neu hinzufügen (E1 ist ja jetzt nicht mehr in der XML) und dann erneut Refresh aufrufen! So würde die JL immer UpToDate sein, habe ich manuell getestet. Ich hatte also die Idee das custom.destination file auszulesen weil dort steht drin welches Element welchen Status hat und auch die Argumente dazu. [SW_HIDE], [SW_SHOWNORMAL]!

Vielleicht hat einer noch eine Idee wie ich an die Entfernten JumpListLink's ran komme!?

10.09.2012 - 21:02 Uhr

Mit der Spezifizierung sollte es schon gehen einen Reader zu implementieren, jedoch bin ich kein Fan von "Erfinde das Rad 2 mal"! Ich kann mir kaum vorstellen das ich der einzige bin der sowas braucht bzw. gebraucht hat....!

10.09.2012 - 17:51 Uhr

Es geht um die Jump Lists, richtig?

JA!

Auf den Wiki Eintrag bin ich auch schon gestoßen, dort hab ich auch das Tool gefunden. Aber ich finde dort kein verlinktes PDF! Kannst du bitte einen konkreten Link posten?

Edit: Jump List Analysis ist recht interessant. Dort heißt es:

The *.customDestinations-ms files are apparently just a series of LNK format streams appended to each other.

Heißt ich brächte nur einen Reader für MS-SHLLINK bzw. eine C# API. Bis jetzt hab ich aber nichts passendes gefunden!

10.09.2012 - 16:30 Uhr

Hallo zusammen,

kennt einer von euch einen Weg mit Hilfe von C#/Win API eine *.customDestinations-ms Datei in ein lesbares Format zu Übersetzen? Der Jump List Parser übersetzt das in eine Textdatei die man sehr lesen kann hat aber keine offene API!

09.09.2012 - 00:11 Uhr

Kleiner Tip noch am Rande. Aller 10 Sekunden ist keine Gute Idee weil du dann früher doer später folgende Meldung bekommen wirst...

Fehlermeldung:
We're sorry...

... but your computer or network may be sending automated queries. To protect our users, we can't process your request right now.

See Google Help for more information.

Oder du baust halt einen dynamischen Proxy ein dann solltest du das umgehen können.

07.09.2012 - 08:33 Uhr

Hallo zusammen,

ich habe ein Problem mit JumpList und CustomCategory und dem verwalten eigener Listen unterhalb der Categories. Kurz zur Sematik meiner Listen. Jeder Eintrag einer Liste ist einer eindeutigen Kategorie zugeordnet wobei 2 Elemente sich eine Categorie teilen können. Es wird immer das zuletzt letzte JumpListLink Element hinzugefügt. Ich verwalte das selber in einer XML und halte dort höchstens 10 Elemente vor. Das klappt soweit ohne Probleme. D.h. wenn das Tool das erstmal gestartet wird dann ist die XML leer und auch keine Kategorie enthalten. Wenn das erste mal mit dem Tool eine Aktion ausgeführt wird dann wird diese Aktion in und die dazugehörige Kategorie hinzugefügt usw. alles ohne Probleme.

Das Problem ist nun wenn ein User aus der Jumplist ein Element raus löscht dann habe ich in der (ich nutze das WindowsAPICodePack) JumpList.RemovedDestinations ein Element drin. Das jedoch ist immer null! Das heißt ich kann es nicht aus meiner XML raus werfen. Hier mal wie ich mein JumpListLink befülle (JumpListElement ist eine eigene Klasse).


JumpListLink link = new JumpListLink(Assembly.GetExecutingAssembly().Location, jumpListElement.Name);
link.Arguments = jumpListElement.Arguments;
link.Path = Assembly.GetExecutingAssembly().Location;
link.WorkingDirectory = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;

Das Problem ist nämlich wenn ich das Element nicht aus der XML entferne und wieder in die Kategorie rein schreibe dann ist die JumpList anschließend komplett leer?

Ich mal in das APICodePack rein geschaut und auch den Grund dafür gefunden! Er versucht das gelöschte JumpListItem in ein IShellLinkW bzw IShellLink zu casten aber das ist es natürlich nicht.

Weiß jemand was ich falsch mache oder wie ich mein Vorhaben bewerkstelligen kann?

Edit: Komisch ist das wenn ich ein Element aus der JumpList entferne was das Tool noch läuft dann ist in der JumpList.RemovedDestinations wirklich der Pfad den ich dan das Element geschrieben habe drin. Wenn das Tool beendet ist und ich entferne es danach und starte das Tool anschließend neu dann bekomme ich wieder null bei dem Element als Pfad!?