Hallo, ich möchte gerne eine eigene Kategorie in der EventLog erstellen und nutzen. Dafür habe ich folgenden Code, der mir ggf. die Kategorie erstellt.
if (!EventLog.SourceExists("MeineQuelle"))
{
EventLog.CreateEventSource("MeineQuelle", "MeineAnwendung");
}
Bei dem Erstellen wird eine ArgumentException mit der Beschreibung "Das Protokoll MeineAnwendung wurde bereits als Quelle auf dem lokalen Computer registriert." geworfen.
So ganz verstehe ich es nicht. Wieso muss ich die Quelle überprüfen? Eigentlich möchte ich doch die Kategorie erstellen.
Wieso sagt er mir, dass "die Quelle MeinAnwendung" und nicht der Source bereits existiert?
Der 2te Parameter von CreateEventSource sind "source" und "logName" und genau in dieser Reihenfolge.
Die Fehlermeldung sagt somit: Der "logName" wurde bereits als "source" registriert.
Ich bin verwirrt, bitte helft mir 🙂
verwendetes Datenbanksystem: MySQL
Hallo ich nutze nHibernate und bekomme nun eine Fehlermeldung ich nicht so recht verstehe.
Die folgende Methode wirft in der Zeile "var a = crit.List();" eine TransientObjectException mit der Beschreibung:
object references an unsaved transient instance - save the transient instance before flushing: AudioCD
private bool exists(Type t, FileInfo f)
{
var crit = Singleton.DBSession.Session.CreateCriteria(t);
crit.Add(Expression.Eq("Path", f.FullName));
crit.SetMaxResults(1);
var a = crit.List();
return a.Count > 0;
}
Hat jemand eine Idee?
Ok danke. Ich frage mich aber noch immer, ob das die beste Variante ist.
Der Typ List implementiert IList, somit enthält er "unnötige Daten". Da ich ja eigentlich nur IList benötige. Bei IList handelt es sich zwar um ein praktischen Fall aber theoretisch könnte es aber auch Schnittstellen geben, die nicht nur alleine implementiert wurden.
Vielleicht steigere ich mich zuweit da rein. Aber ich versuche halt bestimmtes Vorgehen richtig zu nutzen.
Danke, ich frage mich, ob es sich dabei um ein gängiges Vorgehen handelt.
Hallo ich arbeite mit nHibernate als OR-Mapper. In einer Klasse habe ich Childs der selben Klasse. Damit der OR-Mapper mit der Eigenschaft Childs arbeiten kann, ist diese vom Typ IList<MeineKlasse>
Von meinem Verständis sollte doch beim Instanziieren der Klasse die Childs Collection instanziiert sein.
Wenn ich das Objekt aus der Datenbank hole, wird Childs auch mit 0 Items instanziiert.
Jetzt gibt es ein Probleme bzw. Gedanke der mir dabei kommt.
Ich könnte Childs durch den Konstruktor instanziieren lassen. Dabei habe ich aber das Problem, dass es sich ja um ein Interface, welches ich ja nicht instanziieren kann, handelt.
Was könnt ihr mir vorschlagen?
Vielen Dank
Tim
Hallo, ich möchte gerne Brennen, ab und zu funktioniert es auch mit dem selben Code.
Teilweise läuft es erfolgreich und teilweise nicht. Ich kann es leider nicht reproduzieren, da es tagelang funktioniert oder nicht funktioniert. Im Fehlerfall enthält der Statuscode, des Events OnDoneBurn, NERO_BURN_FUNCTION_NOT_ALLOWED
Ich habe 2 Klassen AudioCD und AudioTrack.
Von der AudioCD existiert eine Instanz "cd" in der eine Collection von AudioTrack vorhanden ist. "cd.AudioTracks".
NeroAudioTracksClass tracks = new NeroAudioTracksClass();
foreach (AudioTrack t in cd.AudioTracks)
{
NeroAudioTrackClass track = new NeroAudioTrackClass();
track.Artist = t.Artist;
track.Filename = t.Path;
track.Title = t.ElementName;
tracks.Add(track);
}
Drive.BurnIsoAudioCD(cd.Artist, cd.ElementName, false, null, tracks, null, NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE,
4, NERO_MEDIA_TYPE.NERO_MEDIA_CDR);
Vorher wird übrigends schon dafür gesorgt, dass ein gültiges Medium eingelegt ist.
Das realisiere ich über WaitForMedia.
Hat vielleicht jemand eine Idee an was das liegen kann?
Super, vielen Dank es funktioniert.
Die nHibernate Doku ist leider nicht sehr gut.
Ich weiss nicht innerhalb welches Elements der Timestamp-TAG gehört.
Innerhalb von class oder property funktioniert es leider nicht, wie die folgenden Fehlermeldungen beschreibe. In der Dokumentation gibt es leider auch keine weiteren Informationen.
XML validation error: Das Element 'class' in Namespace 'urn:nhibernate-mapping-2.2' hat ein ungültiges untergeordnetes Element 'timestamp' in Namespace 'urn:nhibernate-mapping-2.2'.
XML validation error: Das Element 'property' in Namespace 'urn:nhibernate-mapping-2.2' hat ein ungültiges untergeordnetes Element 'timestamp' in Namespace 'urn:nhibernate-mapping-2.2'.
Danke aber ich suche etwas Abgespecktes und möchte nicht den ganzen Code von MediaPortal auseinnander nehmen. Vielleicht existiert eine fertige DLL mit der ich Sat Radio Steuern kann.
Ja es scheint 2 zu geben:
System.Linq stellt allgemein LINQ zur Verfügung
System.Data.Linq die LINQ zu SQL
Leider habe ich nur ein Assembly gefunden das System.Data.Linq enthält.
Wenn ich System.Linq als using-Direktive einfüge erscheint folgender Compiler Fehler:
Fehler 1 Der Typ- oder Namespacename "Linq" ist im Namespace "System" nicht vorhanden. (Fehlt ein Assemblyverweis?)
Weil sich die using-Direktive nicht auf Assemblies, sondern auf Namensräume bezieht, aber das sind Grundlagen...
Genau das ist das komische.
Es gibt 2 Namensräume: System.Linq und System.Data.Linq
Es scheint in dem Framework nur ein Assembly für System.Data.Linq zu geben.
Wieso erstellt VS eine Using-Direktive von System.Linq?
Habt ihr damit bereits Erfahrung gemacht? Ich suche eine API etc. mit der ich Sat Radio wiedergeben kann.
Hmm danke, sehr komisch. Wie kommt VS dann darauf nen using System.Linq zu erstellen? 🙁
Ja using wird erzeugt bei einer neuen Klasse. Ich nutze das Framework 3.5 aber finde es nicht in der Liste.
Hallo, leider kann ich keinen Verweis auf System.Linq bei mir einbinden.
In der Kategorie .NET gibt es kein System.Linq.
Muss man das extra installieren?
Hat dazu jemand einpaar Infos?
Weil bei dem erstellen einer neuen Klasse wird automatisch ein using eingebunden, dass ich jedesmal händisch löschen muss.
Vielen Dank.
Ok danke.
Ich habe eine Tabelle bei jedem Save || SaveOrUpdate soll ein Feld mit Namen UpdateDate mit dem aktuellen Datum gefüllt werden. Kann ich dafür eine Regel in der XML erstellen?
Vielen Danke. Ich musste das persist herausnehmen. Aber nun funktioniert alles. In der Doku konnte ich auch kein persist finden. Was hat es damit auf sich?
Ok danke.
Ich habe die Änderung noch nicht vorgenommen und habe bereits jetzt schon ein Problem.
Ich erstelle eine Instanz von AudioCD. Die Eigenschaft ist "public virtual IList<AudioTrack> AudioTracks"
Da ich IList nicht instanziieren kann, instanziiere ich es als new List<AudioTrack>()
Wenn ich nun die AudioCD fülle, in die Collection einpaar AudioTracks hinzufüge und über Save die AudioCD speichern möchte, wird beim Commit folgende TransientObjectException geworfen:
{"object references an unsaved transient instance - save the transient instance before flushing: MediaHome.BusinessObjects.AudioTrack"}
Danke.
Was ist aber ein Module Handle?
Der kommt dann an 3 Stelle oder?
Ok super, danke. habe mal geschaut.
Wäre dann der Global Hook der immer einspring❔
SetWindowsHookEx(
WH_KEYBOARD_LL,
KeyboardHookProcedure,
0,
0);
Ok danke.
Muss ich vor dem Beenden meiner Anwendung den Handler wieder aus der Liste nehmen oder geschieht das irgendwie automatisch beim beenden eines Threads?
Viele Dank für deine umfangreichen Informationen und den Link zu dem Sample.
Das hat mir sehr geholfen.
Ok habe ich das so richtig verstanden?
Es gibt eine Liste von Eventhandlern die ausgeführt werden, wenn ein Hook ausgelöst wird und zwar nach dem First Input - Last Output Prinzip.
Wenn ich nun eine neue Eventhandlern SetWindowsHookEx übergebe, ersetzt dieser Eventhandlern nicht den Alten. Dadurch, dass ich aber die Kette unterbrechen kann, wird der Folgende nicht ausgeführt.
Muss ich vor dem Beenden meiner Anwendung den Handler wieder aus der Liste nehmen oder geschieht das irgendwie automatisch beim beenden eines Threads?
Fast vergessen, denk dran unmanged Code nen Breakpoint in die WndProc und .. ach will gar nicht wissen was passiert - sieht sicher dann lustig aus 😉
Was meinst du?
Es scheint wirklich an
<key column="cdid" />
gelegen zu haben.
Ich habe cdid durch autoId ersetzt und es funktioniert.
Eine kleine Frage habe ich noch:
Ich möchte nun von einem Track auch eine Referenz auf die CD haben.
Wie setze ich das elegant um?
Es ist gut möglich, das Load "Lazy Loading" nutzt und Get nicht.
Wobei man dies doch eigentlich in der XML Datei definiert oder nicht?
Ich frage mich nur wieso ich für das laden der Collection Get nutzen soll.
Wenn ich das Laden innerhalb des Properties der Collection hinzufügen würde, würde ich ja Lazy Loading nachbilden oder?
Die Arbeit möchte ich eigentlich nHibernate überlassen.
Leider funktioniert es noch immer nur über AddClass.
Ja, es ist "eingebettet". Über AddClass funktioniert es ja auch.
Wenn es nicht eingebettet wäre, würde AddClass es ja auch nicht finden.
Da ich einerseits gerne AddAssembly nutzen würde und andererseits ja auch Querverweise nutzen möchte, muss das Problem gelöst werden 🙁
Vielen Dank.
2.1) Sehe ich das richtig, dass die Methode die als HOOKPROC der Function SetWindowsHookEx übergeben wird, als Parameter lParam eine Struktur von dem typ KBDLLHOOKSTRUCT liefert?
2.2) Wenn das der Fall ist. Wie kann ich dann sagen, dass bei einer bestimmten Taste (die nicht gesperrt werden soll), der Hook "normal" durchgeführt werden soll.
Im moment würde ja die ganze Tastatur gesperrt werden oder?
Was genau muss ich mit SetWindowLong machen?
Mit UnhookWindowsHookEx mache ich die Änderungen von SetWindowsHookEx rückgängig oder?
Innerhalb von HOOKPROC kann ich aus VS nicht debuggen oder?
Es kann sein, dass ich irgendwas falsch verstehe aber für was benötige ich Get?
Wenn ich mir zB eine AudioCD per Load aus der Datenbank hole, ist darin doch eine Collection mit AudioTrack drin. Wenn ich darauf zugreife, wird wegen aktiviertem "Lazy", die Collection nachgeladen.
Vielen Dank.
2.3)
AudioCD.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="MeinNamensraum.AudioCD, MeinAssembly" table="audiocds">
<id name="AudioCDId" column="cdid" type="int">
<generator class="identity" />
</id>
<property name="CDName" column="cdname" type="String"/>
<property name="Year" column="year" type="int" />
<property name="Genre" column="genre" type="String"/>
<property name="Artist" column="artist" type="String" />
<property name="InsertDate" column="insertDate" type="DateTime"/>
<property name="UpdateDate" column="lastUpdateDate" type="DateTime"/>
<property name="DiscId" column="discid" type="String" />
<set name="AudioTracks">
<key column="cdid" />
<one-to-many class="MeinNamensraum.AudioTrack, MeinAssembly" />
</set>
</class>
</hibernate-mapping>
AudioTrack.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="MeinNamensraum.AudioTrack, MeinNamensraum" table="audiotracks">
<id name="AudioTrackId" column="autoId" type="int">
<generator class="identity" />
</id>
<property name="TrackNr" column="tracknr" type="int"/>
<property name="Artist" column="artist" type="string" />
<property name="Title" column="title" type="String"/>
<property name="Genre" column="genre" type="String" />
<!--<property name="CD" column="cd_id" type="Int32"/>-->
<property name="Path" column="pfad" type="String"/>
<property name="Checksum" column="checksumme" type="String"/>
<property name="InsertDate" column="insertDate" type="DateTime"/>
<property name="UpdateDate" column="lastUpdateDate" type="DateTime"/>
</class>
</hibernate-mapping>
2.4) Dann ist eine Bag flexibler und nutzt eine Framework Collection? Wieso sollte man dann ein Set nutzen. Ich möchte das Set sowieso auf ein List<MeinTyp> mappen. Was empfehlst du mir? So ganz klar ist mir das leider noch immer nicht.
Vielen Dank für deine Antwort.
2.1) Mit virtual deklariere ich bereits alle Eigenschaften.
2.2) Enthält, wenn ich class="AudioTrack" schreibe, die IList auch AudioTrack Objekte?
2.3) Was kann in den Mappings falsch sein, wenn das Laden über AddClass funktioniert, aber bei einem AddAssembly fehlschlägt.
Die XML Files sind alle "eingebettet". Bei dem Entfernen des "Set" Eintrags, kommt es zu keinem Fehler.
Ich bin bisher von der Reihenfolge ausgegangen, da der Typ AudioTrack in AudioCD noch nicht bekannt ist, da er von AddAssembly erst anschliessend eingeladen wird.
Das bestätigt doch eigentlich auch mein Test oder nicht?
2.4) Den Unterschied von Sets und Bags verstehe ich nicht.
@JAck30lena
Die Anwendung soll nicht Lustig sein 😉
Der Rechner soll nur eine Art Terminalfähigkeit bieten.
Es handelt sich dabei auch nicht um eine Anwendung zum herunterladen und installieren, sondern um einen kompletten Rechner der ausgeliefert wird inkl. der Software.
@Andreas.May
Vielen Dank
Einpaar kleine Fragen hätte ich dazu noch.
Was genau bedeutet LowLevel?
Wenn ich den Code richtig verstehe, werden die Mouseaktivitäten an MouseHookProc weitergeleitet und nicht mehr die Standarhookroutine(?) für den Thread.
Kann ich mir das "so einfach" machen, ich nutze einfach die ThreadId der "anderen" Anwendung?
Dazu hätte ich eine grundsätzliche Frage, wie könnte man dies für "Systemtasten" umsetzen (Alt+Tab)?
Wenn die Anwendung, deren Hook ich "umgemapped" habe, neugestartet wird, ist dann wieder alles i. O.?
Hallo, ich möchte gerne bestimmte Tasten(kombinationen) verhindern.
Das gilt nicht nur für meine Anwendung sondern Systemübergreifend.
Der Zweck ist, das eine andere Anwendung gestartet wird. Bestimmte Tasten sollen in dem moment nicht zur Verfügung stehen. z.B. Alt+Tab oder auch einzelne Tasten.
Wenn möglich, würde ich auch gerne die rechte Maustaste oder ggf. die ganze Maus deaktivieren.
Hat jemand dazu Ideen etc?
Vielen Dank
.tim
cmd fenster geht auf, aber er schreibt nix rein
Was heisst das, bleibt das Fenster offen mit dem Cursor am Anfang oder geht es wieder zu? Bzw. beschreib bitte genauer was passiert.
Statt
public Test(enum t)
musst du schreiben
public Test(NamedesEnums t)
enum ist nur ein Schlüsselwort für das definieren von enums.
Vielen Dank GarlandGreene genau so eine Antwort habe ich gesucht 🙂
Zwei Fragen hätte ich dazu noch:
In einem vorherigen Post, hatte ich einen Auszug aus der Dokumentation gepostet. In diesem Abschnitt wird sehr auf das Commit eingegangen. Bedeutet dies, dass nach einem Commit die Session "gekillt" wird, oder das Entity irgendwie anders abgekapselt wird?
Ich möchte gerne 2 Objekte verbinden. D.h. ich habe eine List<AudioTracks> in AudioCD.
Dafür habe ich zwei XML Dateien erstellt, die das Mapping für AudioTrack und AudioCD enthält.
Ausschnit aus AudioCD.cs:
public List<AudioTrack> AudioTracks
{
get;
set;
}
Ausschnit aus AudioCD.hbm.xml
<set name="AudioTracks">
<key column="cdid" />
<one-to-many class="AudioTrack" />
</set>
Seit dem ich die Collection in die XML geschrieben habe, kommt es bei dem Aufruf der Methode AddAssembly des Config Objekts zu folgender
InnerException {"associated class not found: AudioTrack"}
Wahrscheinlich wird zuerst die AudioCD eingelesen. Deshalb habe ich es vorerst temp. über AddClass in die Configuration eingelesen.
Das funktioniert auch, leider sollen die AudioTracks auch wieder verweise auf Ihre CD haben. Nun kann ich nicht die Classen nacheinnander hinzufügen. Wie kann sowas geregelt werden?
Vielen Dank für eure Antworten.
Wie ich das verstehe ist der Sinn von Singleton das Einschränken der existieren Instanzen.
Das ist zwar für diesen Zweck nicht zwingend erforderlich, aber kann nicht schaden. Ich bin bisher etwas anders vorgegangen, aber das Singleton Pattern gefällt mir besser.
Da auch keine anderen Vorschläge vorhanden sind, halte ich Singleton für diesen Zweck als gute Lösung.
Ich stehe bei jedem Projekt wieder vor folgendem Problem.
Meine Anwendung hat Klassen die von dem MainForm instanziiert werden. Diese sollen z. B. auf die Datenbank zugreifen oder andere gemeinsam Referenzen nutzen.
Ich habe 2 verschiedene Möglichkeiten genutzt, die aber irgendwie beide nicht so der Hit sind:
Wie macht Ihr sowas. Gibt es dafür eine "So macht man es"-Lösung. Oder ist das Geschmackssache?
du mußt das aber nicht zwingend innerhalb einer transaktion machen.
du kannst dir die sachen auch direkt zurückgeben lassen
Ok dann müsste ich aber beim Programmstart eine Session aufmachen und die erst beim schliessen der Anwendung wieder zumachen. Weil ohne Session kann sich das Objekt ja nicht bei dem Zugriff auf ein Property aktualisieren?
Das Problem ist, du erstellst den Parameterstring und ein teil davon ist die gruppe, die du erst zu einem späteren Zeitpunkt mit Daten füllst.
@BerndFfm micht irritiert das auch etwas.
Folgendes Codebeispiel ist in der NHibernate Doku
s = sessions.OpenSession();
ITransaction tx = sessions.BeginTransaction();
User u = (User) s.Find("from User u where u.Name=?", userName, NHibernateUtil.String)[0];
IDictionary permissions = u.Permissions;
tx.Commit();
s.Close();
int accessLevel = (int) permissions["accounts"]; // Error!
Dazu ist folgendes geschrieben:
It could be in for a nasty surprise. Since the permissions collection was not initialized when the ISession was committed, the collection will never be able to load its state. The fix is to move the line that reads from the collection to just before the commit.
Es scheint ein festes Vorgehen zu sein alle Aktionen (auch wenn nur lesender Zugriff existiert) in eine Transaktion aufzunehmen.
Ok ich habe noch eine Frage zu NHibernate bzw. könnte auch eine grundsätzliche Frage zu O/R Mappern sein.
Ich habe nun zwei Klassen: Rechnung und RechnungsPositionen
In Rechnungen ist eine Sammlung von RechnungsPositionen vorhanden.
Jetzt gibt es 2 Möglichkeiten:
Entweder die Collection wird mit aus der Datenbank geholt oder erst wenn sie benötigt wird.
Ich finde es besser wenn die Daten nachgeladen werden. Leider habe ich anschliessend gelesen, das vorher die Transaktion nicht commitet werden darf.
Stellen wir uns folgendes Szenario vor:
Ich habe eine GUI auf der sind mehrere Rechnungen aufgeführt. Nun kann man sich durch die Auswahl die Rechnungspositionen anzeigen lassen.
Da zu diesem Zeitpunkt die Transaktion schon geschlossen ist, können die Daten nicht nachgeladen werden. Vorher möchte ich sie aber auch nicht laden, da unklar ist ob und ggf. wieviele Rechnungspositionen benötigt werden.
Das wird in der Realität wahrscheinlich noch extremer. Eine Rechnungsposition könnte noch eine Referenz auf einen Artikel und der Artikel könnte z. B. wieder auf etwas verweisen.
Wie kann sowas gelöst werden?
dann lädst du hibernat und nicht nhibernat runter ^^. auf der seite gibt es eine extra spalte hibernate.
Ok vielen Dank. Genau das war das Problem 😉 Jetzt sieht alles auch etwas dlliger aus^^
Die ersten Schwierigkeiten habe ich bereits beim Download. Wenn ich den Download nutzen, bekomme ich nur Java Classen etc.
Diesen habe ich getestet. Siehe Post von 14:35:01 Uhr.
Leider funktioniert bei mir nicht das Example. Visual Studio sagt, dass das Projekt nicht geladen werden konnte. Wegen einer Target File.
@JuyJuka
So ganz verstehe ich das nicht. Jedes Objekt enthält doch eine andere Business Logik. Wie man kann man es "statisch" durch einen Mapper abbilden.
@Zebes
von nhibernate habe ich schon gelesen. Das scheint nur schon so komplex, dass es fraglich ist, ob das Einarbeiten, bezogen auf die Zeit, effektiv ist.
@JuyJuka
Ok ich verstehe was du meinst. Was für einen OR-Mapper für MySQL kannst du empfehlen.
@thepixel
Danke es funktioniert.
@schaedld
Und was hat es mit dem LINQ "Paket" für MySQL auf sich? Wäre nämlich super wenn ich das irgendwie nutzen könnte 🙂
Hi,
nimm beim Parameter mal ? statt @.
thepixel
Was genau meinst du? Ich möchte gerne die Parameter setzen, dabei sollen Unterschiede in der Reihenfolge der Zuweisung der Parameter und im Statement egal sein. Setze ich mit "?" nicht einen "anonymen" Parameter?
vielleicht liege ich ja falsch, aber ado.net sollte eigentlich kein OR-Mapper sein. oder liefert ado.net inzwischen dafür was mit?
Wie ich das verstehe, ist der OR Mapper die "Schnittstelle" zwischen den Objekten und der Datenbank. Genau das macht doch auch ADO.NET. Ich setze mein Statement ab und erhalte ein Dataset (oder Tabelle).
Ich habe gelesen dass LINQ nur mit dem Microsoft SQL Server funktioniert. Also nicht mit MySQL.
Ich hatte LINQ für MySQL gefunden. Aber so wirklich verstehe ich das alles nicht. Das Example Projekt davon kann nicht geladen werden. Somit habe ich keine Demos. Die darin enthaltene .NET DLL habe ich eingebunden. Mit den Klassen kann ich aber leider nichts anfangen.