Laden...

Forenbeiträge von dannoe Ingesamt 261 Beiträge

20.05.2022 - 09:18 Uhr

Bist du dir sicher, dass deine Pfadangabe stimmt? Aus Versehen den falschen Pfad kopiert?
Hat die DLL vielleicht andere Abhängigkeiten die nicht aufgelöst werden können? -> Dependency Walker

Ansonsten könntest du in der Installationsroutine deiner Software, nach der Drittanbieter Software suchen (vielleicht trägt die sich in die Registry ein?) und dann einen Symlink in deinem Installationsordner erstellen der auf die Assembly der Drittanbieter Software zeigt.

18.05.2022 - 08:59 Uhr

Also ich lese auf der Webseite "TRY 30 DAYS FREE" und "START FOR FREE"

13.05.2022 - 20:56 Uhr

Im Übrigen werden die Methoden durch ihr Präfix im Editor bei der Codevervollständigung alle schön gebündelt angezeigt. Auch ein Vorteil.

Sofern du die Methoden manuell aufrufst dann stimmt das. Ich bin davon ausgegangen, dass du die Methoden nur via Reflection aufrufst.

Für diesen einen Fall nutzen uns die Attributen leider nichts: [...]

Warum die Attribute dabei nichts nutzen sollen, hast du aber nicht beschrieben.

Nach deiner ausführlicheren Beschreibung, würde ich es jetzt so umsetzen:


[File("Parts_22")]
public class FilePostProcessor_Parts_22 : BaseProcessor
{
    [PostProcess("PartNumber")]
    public static bool TransformPartNumberIntoXyz() 
    {
        // do something
    }

    [PostProcess("Art2NoH")]
    public static bool TransformArt2NoHIntoZyx() 
    {
        // do something
    }
}

BaseProcess ist deine Basisklasse mit der gemeinsamen Funktionalität.
Ein weiterer Vorteil wenn du die Attribute verwendest:

  • Du kannst einen Roslyn Analyzer bauen, der bei vorhandenem PostProcess Attribute die Methodensignatur erzwingt.
  • Du kannst zur Runtime überprüfen ob alle Methoden die das Attribute haben, auch die richtige Signatur haben.
    In deinem Fall kann es schnell passieren, dass eine Signatur falsch ist und das fällt dann fast nicht auf. (Außer dass die Nachverarbeitung des Feldes nicht stattfindet)

Ich hab das jetzt nur der Vollständigkeit halber geschrieben. Vielleicht hat mal jemand ein ähnliches Problem und sucht etwas Inspiration.

13.05.2022 - 19:42 Uhr

Wenn es einen guten Grund gibt, dass die Methoden static sind, dann muss er aber noch etwas warten. Static Interface Member sind erst in der Preview.

13.05.2022 - 19:10 Uhr

Also ich würde lieber das hier wählen


public class KlasseA
{
    [PostProcess("PartNumber")] // 
    public static bool TransformPartNumberIntoXyz() 
    {
           // Methode hat einen sprechenden Namen bzw. es ist möglich ihr einen sprechenden Namen zu geben
           // Standard .NET Namenskonventionen wurden eingehalten
    }
}

statt diesem


public class KlasseA
{
    public static bool nvPartNumber() 
    {
           // nv steht vermutlich für Nachverarbeitung (Englisch und Deutsch gemischt 👎)
    }
}

06.05.2022 - 09:37 Uhr

Verwendest du .NET Framework? Maximale Objektgröße ist dort standardmäßig (auch in 64 Bit) 2 GB

Versuch mal in der app.config:


<configuration>
  <runtime>
    <gcAllowVeryLargeObjects enabled = "true" />
  </runtime>
</configuration>

04.05.2022 - 11:06 Uhr

Ist es eine Anforderung, dass die Dateien nicht verändert werden? Wenn nicht, könntest du auch Meta-Informationen mit z.B. exif in die Dateien schreiben.
Wenn du dann einfach eine GUID in die Meta-Informationen der Datei schreibst, kannst du die GUID verwenden um Sie mit deinen Informationen zu verknüpfen.

22.04.2022 - 08:39 Uhr

Ich weiß nicht ob ich dein Bedenken richtig verstanden habe, aber:

Du hast im State noch den Zähler, d.h. wenn zwei identische Objekte freigeben wollen, dann ist der Zähler auch auf 2 und muss erst auf 0 fallen, bevor ein anderes Objekt mit EnterAsync "eintreten" darf. D.h. bevor nicht jedes Objekt A den Zähler dekrementiert (und somit freigegeben) hat, kann auch kein Objekt B in den Channel kommen.

19.04.2022 - 16:05 Uhr

mit xPath z. B. so:


xDoc.SelectSingleNode("order/props/@version").Value

10.04.2022 - 18:53 Uhr

Es braucht nicht jeder RadioButton einen eigenen Eventhandler. Einfach den selben nehmen und durch den Code von Th69 funktioniert es dann trotzdem.
Eventhandler nur an einen Teil von (RadioButton)-Controls hängen wäre für mich ein Code-Smell.

10.04.2022 - 18:48 Uhr

Falls deine ganzen regulären Ausdrücke tatsächlich nur aus Literalen bestehen und kein regulären Ausdrücke enthalten, brauchst du die Regex Klasse auch nicht.

Statt



string wetter = "wetter: x";
string wetter2 = "wetter: ox";
Regex regexwetter = new Regex(wetter);
Regex regexwetter2 = new Regex(wetter2);
if (regexwetter.IsMatch(s)|regexwetter2.IsMatch(s))
{
    ApiRequest apiRequest2 = new ApiRequest();
    apiRequest2.PostRequest(Nameof, "pink", Beschreibung, tempTime2);
    break;
}

kannst du auch


string wetter = "wetter: x";
string wetter2 = "wetter: ox";
if (s.IndexOf(wetter) >= 0 || s.IndexOf(wetter2) >= 0)
{
    ApiRequest apiRequest2 = new ApiRequest();
    apiRequest2.PostRequest(Nameof, "pink", Beschreibung, tempTime2);
    break;
}

schreiben.

Hinweis: Es gibt außerdem einen Unterschied zwischen dem
|| Operator: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/operators/boolean-logical-operators#conditional-logical-or-operator-
und dem
| Operator: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/operators/boolean-logical-operators#logical-or-operator-

06.04.2022 - 14:26 Uhr

Deine Schleife wird für die letzte Zeile nicht ausgeführt. Du hast als Bedingung i < dataGridView1.RowCount - 1 angegeben.

28.03.2022 - 21:37 Uhr

Suchst du vielleicht eine REPL (Read-Eval-Print-Loop)?
Also eine Schleife (Loop), in der du immer wieder Eingaben vom Benutzer abfragen kannst (Read), diese verarbeitest (Eval) und anschließend das Ergebnis ausgibst (Print).

28.03.2022 - 14:29 Uhr

Würde es dir reichen wenn der Code nur in den Hauptbranch gemergt werden darf, wenn er buildet?
Dann musst du lediglich:

  • Pipeline erstellen die den Code buildet
  • im Haupt-Branch die Policy aktivieren, dass die vorher erstellte Pipeline erfolgreich durchlaufen werden muss

Schon kannst du nur noch Pull Requests mit "buildbarem" Code abschließen.

23.03.2022 - 20:19 Uhr

Ich hatte solche NUL Kontrollzeichen schon öfters in Dateien wenn ich von alten Windows Servern (2008 und abwärts) etwas über RDP via Copy&Paste auf aktuelle Server kopiert habe.
Kann mich aber den vorherigen Aussagen auch nur anschließen bzgl. Git/Versionsverwaltung.

15.03.2022 - 07:39 Uhr

Ich kenn mich zwar nicht mit dem Bluetooth Details aus, aber in dem Quellcode siehst du wie das Tag der Combobox gesetzt wird: https://github.com/microsoft/Windows-universal-samples/blob/main/Samples/BluetoothLE/cs/Scenario2_Client.xaml.cs

Das musst du halt ähnlich bei dir machen. (Nur halt ohne Combobox)
Also alle Services (sind vermutlich die Bluetooth Geräte?) via bluetoothLeDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached); holen und dann halt den richtigen in der/dem Liste/Array auswählen.

Im Microsoft Beispiel wird dieser Wert folgendermaßen erzeugt:

Für die Zukunft solltest du die erwähnten Beispiele verlinken, dann müssen die Helfer nicht selbst danach suchen.

03.02.2022 - 10:31 Uhr

Ich rede vom Output Fenster in Visual Studio wenn du die Anwendung über Visual Studio startest. Dort funktioniert es mit folgendem Code:


private void button1_Click(object sender, EventArgs e)
        {
            Console.WriteLine("test");
            Debug.WriteLine("test2");
        }

Ergebnis: siehe Anhang

Für die PowerShell bzw. cmd musst du den "Output type" deiner Anwendung auf "Console Application" stellen.
Rechtsklick aufs Projekt -> Properties -> Application -> Output type

Es öffnet sich dann aber auch ein zusätzliches Konsolenfenster wenn du die Anwendung per Doppelklick startest.
Edit: Ob es noch andere Nachteile gibt, musst du selbst recherchieren.

03.02.2022 - 09:58 Uhr

Was erwartest du denn bei einem Console.WriteLine wenn du eine GUI offen hast?
Wenn du in die Debug Console von VS schreiben willst, musst du Debug.WriteLine verwenden.

21.12.2021 - 22:10 Uhr

In deinem Query in C# schreibst du "product l".
In deinem Beispiel Query, den du direkt ausgeführt hast, schreibst du "lproduct l".

Liegt hier der Fehler? Falls ja, solltest du langsam mal Feierabend machen 😉

21.12.2021 - 21:21 Uhr

Also wenn du z.B. diese zwei Zeilen konkatenierst:

  • "to_char(sysdate,'HH24:MI') AS Erstellzeit"
  • "From lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r"

Dann kommt doch folgendes raus oder:

to_char(sysdate,'HH24:MI') AS ErstellzeitFrom lcos_ship_head lh,lcos_ship_line ll,product l,lproduct_um lum,lroute r

Und "ErstellzeitFrom" ist glaube ich nicht gewollt oder?

21.12.2021 - 20:36 Uhr

Schau dir im Debugger mal den Inhalt deines cmd.CommandText an. Fällt dir dann bestimmt schnell auf 😉

Tipp: Leerzeichen

28.11.2021 - 13:04 Uhr

Unter Windows 10 kann ich, sofern ich mehrere Geräte angeschlossen habe, unter dem Sound Icon in der Taskbar einfach das Standardgerät wechseln.
Mein privater Rechner hat jetzt leider nur eins, aber ich habe im Screenshot die Stelle markiert, bei der ich es normalerweise wechseln kann.

01.11.2021 - 11:13 Uhr

Der Fehler "Application specific password required" sagt dir schon dass du dir ein Passwort für die Anmeldung generieren lassen musst. Du kannst deine Google Kontodaten nicht für IMAP verwenden.
siehe Sign in with App Passwords - Google Account Help

28.10.2021 - 12:28 Uhr

Du hast angehakt, dass er beim Auslösen dieser Ausnahmen anhalten soll. (siehe Screenshot)

Über "Debug" -> "Windows" -> "Exception Settings" kannst du das auch gesammelt einstellen.

13.10.2021 - 10:21 Uhr

Die Frage betrifft zwar c++, aber gilt natürlich trotzdem: is-task-manager-a-special-kind-of-always-on-top-window-for-windows-10

09.09.2021 - 18:39 Uhr

Ich glaube einer von uns hat die Frage falsch verstanden.

So wie ich es lese, hat Abraham eine Funktion die seine Datenbank verschlüsselt und entschlüsselt (mit einem festen Schlüssel, ungleich dem Masterpasswort) und er möchte dass die Datenbank nur mit einem bestimmten Passwort entschlüsselt werden kann. Um das zu erreichen hat er deswegen ein Passwort als Hash in einer Datei abgelegt. Wenn jetzt jemand die Datenbank entschlüsseln möchte, prüft er in seinem Programm ob das eingegebene Passwort gleich dem Hash in der Datei entspricht. Falls dem so ist dann stößt er den Entschlüsselungs-Mechanismus mit seinem festen Schlüssel (nicht dem Passwort) an.

D.h. in meinen Augen hat er nur nicht daran gedacht, dass die Verschlüsselungsfunktion selbst, das Masterpasswort verwenden kann. Dadurch muss auch nirgendwo das Masterpasswort gespeichert werden.

Wenn dann jemand versucht die Passwortdatenbank mit einem falschen Passwort zu entschlüsseln, dann kommt nur Kauderwelsch raus.
Das ist ein Mechanismus zur Abwehr einer
>

Mir fällt leider der Name dazu nicht ein.

Nein, ich meine eine ganz normale symmetrische Verschlüsselung. Wenn ich etwas mit einem Schlüssel A verschlüssle und es versuche mit Schlüssel X zu entschlüsseln, dann kommt halt irgendwas raus.
Du meinst vermutlich die "Key derivation", dabei wird X-mal der Schlüssel "verformt" um so die benötigte Entschlüsselung bzw. Rechenzeit zu erhöhen.

09.09.2021 - 18:22 Uhr

Du musst deine Passwortdatenbank mit dem Masterpasswort (bzw. mit einem Hash des Passworts) verschlüsseln, dann kann keiner irgendwas austauschen.
So macht es bspw. auch KeePass. (Ein Open Source Passwortmanager geschrieben in C#)

Wenn dann jemand versucht die Passwortdatenbank mit einem falschen Passwort zu entschlüsseln, dann kommt nur Kauderwelsch raus.

19.08.2021 - 12:20 Uhr

Und lass dir bitte mal im Falle des automatischen Starts den Environment.CurrentDirectory ausgeben.

19.08.2021 - 09:20 Uhr

Bitte gib mal anstatt Environment.CurrentDirectory testweise (!) ein festen Pfad an. Beim automatischen Start ist vermutlich das Arbeitsverzeichnis (CurrentDirectory) ein anderes.
Du kannst auch mal die automatisch gestartet Anwendung debuggen, indem du dich nachträglich an den Prozess hängst.

18.08.2021 - 23:47 Uhr

Wenn deine Anwendung als Dienst läuft, dann müsste Environment.CurrentDirectory ein Windows Verzeichnis sein. Deswegen versucht er es dort hinzuschreiben.

Edit:
Das hier sollte dein Problem lösen: system.unauthorizedaccessexception · Issue #378 · ravibpatel/AutoUpdater.NET

24.07.2021 - 20:55 Uhr

Ich vermute, dass die Nachrichten in deinem Postausgang die Nachrichten im Posteingang des Empfängers sind und somit erst gelöscht werden, wenn der Empfänger diese löscht.

Edit: Damit meine ich es ist der gleiche Datensatz in der DB und somit könntest du sonst deine Nachrichten im Posteingang des Empfängers löschen.

05.07.2021 - 19:59 Uhr

Welchen Grund gibt es denn, dass man einen Beitrag nach 30 Minuten nochmal editieren muss?

Es würde reichen, wenn man den Titel nachträglich noch ändern könnte bzw. einen Präfix anhängen kann. (z. B. ein [Erledigt] oder [Gelöst])

05.07.2021 - 19:54 Uhr

Hast du verschiedene Plattformen (x86 vs x64) in der Debug und Release Konfiguration?

Edit: siehe https://stackoverflow.com/a/3872535/1627022

05.07.2021 - 11:02 Uhr

...
Wenn der Thread aber "erledigt" ist, so kannst du den Titel (via Startbeitrag editieren) mit einem [erledigt] voranstellen, damit diese deutlicher sichtbar ist.
...

Gibt es für Startbeiträge eine Sonderregel? Normale Antworten können Normalsterbliche nach einer gewissen Zeit nicht mehr editieren.

03.07.2021 - 19:26 Uhr

Ja siehe Screenshot im Anhang

03.07.2021 - 09:53 Uhr

Mit

großen "Screen"

meinte er den statischen Zugriff auf System.Windows.Forms.Screen (Api-Docs) direkt und nicht auf eine Instanz davon. Und dort gibt es eben kein statisches Property "Bounds".
Was aber natürlich auch logisch ist, weil es kein Bounds über alle Screens geben kann. Die Screens könnten total unterschiedlich groß sein und total wirr angeordnet sein.

27.06.2021 - 10:36 Uhr

Call-by-Reference betrifft die Übergabe von Referenzen bzw. Werte an Methoden. (siehe ref keyword - C# Reference)
In deinem Beispiel erstellst du eine neue Instanz und setzt die Referenz auf diese Instanz in deiner lokalen Variable testClass.
Anschließend überschreibst du den Inhalt (nicht aber das Ziel der Referenz) der lokalen Variable mit "null".

Was gehen würde wäre das hier:


TestClass myclass = new();
SetVariableToNull(ref myclass);
// jetzt ist die Variable myclass auch null

public void SetVariableToNull(ref TestClass testClass)
{
   testClass = null;
}

Dein Dictionary würde trotzdem noch die Referenz auf die ursprüngliche Instanz halten.

16.06.2021 - 11:48 Uhr

DotNetZip (haf/DotNetZip.Semverd) müsste das können

07.06.2021 - 18:19 Uhr

Es könnte auch hilfreich sein, wenn du die Software, die C# als Skriptsprache einbindet, erwähnst. Eventuell gibt es Leute die bereits mit dieser Software gearbeitet haben und dir direkt helfen können.

06.06.2021 - 16:02 Uhr

Das Verhalten im obigen Code ist ein Bug, eigentlich sollte auch die Zuweisung von „0“ nicht funktionieren.

Siehe
>

Wenn man den Beitrag auf Stackoverflow richtig liest, dann steht dort, dass die Zuweisung von 0 zu einem Enum laut C# Spezifikation erlaubt ist. Nur die Zuweisung von 0.0 (0.0m und 0.0f) ist ein Bug und sollte nicht erlaubt sein. Der von getit gepostete Code enthält also keinen Bug, sondern die C# Spezfikation schreibt es so vor.

03.06.2021 - 14:36 Uhr

Hier vielleicht etwas verständlicher:


UInt16 messageId = 0x01; // = 1
UInt16 payloadLength = 0x00; // = 0

var messageIdArray = BitConverter.GetBytes(messageId);
var payloadLengthArray = BitConverter.GetBytes(payloadLength);

var connectSequence = new byte[] { messageIdArray[0], messageIdArray[1], payloadLengthArray[0], payloadLengthArray[1] }; // die Arrays könnte man automatisch mergen

03.06.2021 - 14:25 Uhr

Laut dem Auszug aus deiner Doku darfst du keine Leerzeichen mitschicken:

unsigned char[] connect =
{
0 x 01, 0 x 00,
0 x 00, 0 x 00
};

Also analog in C# mit byte als Typ:


// UInt16
var connectSequence = new byte[] { 0x01, 0x00, 0x00, 0x00 };

Das hier ist übrigens Quatsch, damit wandelst du den Text in die zugehörigen UTF8 Byte Darstellung. Und auch mit ASCII wäre es quatsch. Du sollst Zahlen als Bytes schicken und keinen Text in Bytes umwandeln.


Encoding.UTF8.GetBytes("01 00 00 00");

03.06.2021 - 12:48 Uhr

Zum eigentlichen Problem kann ich leider nichts beitragen.

...
Ich weiß, das ich das vermutlich auch mit EWS lösen könnte, aber da der Kunde wünscht, das (zu Kontollzwecken) die Mails nicht sofort raus gehen, muss die Möglichkeit des Offline-Betriebes möglich sein - u. da weiß ich nicht, ob das mit EWS möglich ist (wenn ich das richtig verstanden habe, dann übergeht EWS ja Outlook, richtig?)...
...

Das sollte gehen. Die E-Mails werden dann halt nur in einem Ordner abgelegt und müssen manuell versendet werden.

CreateItem
Und dann mit MessageDisposition = "SaveOnly" in einen Ordner speichern.

03.06.2021 - 12:37 Uhr

Zeig doch mal etwas Code wie du z. B. die 01 00 00 00 sendest.

url:
>

YAT ist ja sogar in Csharp geschrieben. Dann schau dir doch einfach an wie die es machen 🙂

03.06.2021 - 11:57 Uhr

Du kannst auch mit Wireshark nachvollziehen welche Netzwerkpakete über deinen PC verschickt werden. Du musst dann lediglich dieses YAT und dein Programm vergleichen.

Wireshark · Go Deep.

02.06.2021 - 10:16 Uhr

Der sender Parameter enthält bei Controls eigentlich immer das Objekt, welches das Event ausgelöst hat. Um darauf Zugriff zu erhalten musst du es dann noch casten (siehe Casting and type conversions - C# Programming Guide).

In neueren C# Versionen gibt es dafür das pattern matching (siehe How to safely cast by using pattern matching and the is and as operators):


private void Control_Enter(object sender, System.EventArgs e)
{
    if (sender is System.Windows.Forms.TextBox textbox)
    {
        textbox.BackColor = Color.Red;
    }
}

Früher:


private void Control_Enter(object sender, System.EventArgs e)
{
    var textbox = sender as System.Windows.Forms.Textbox;
    if (textbox != null)
    {
        textbox.BackColor = Color.Red;
    }
}

19.05.2021 - 14:52 Uhr

...
die Wörter getauscht und rufe die Schleifen 2 x auf.
Wenn ich nur eine bräuchte, wäre es schöner.
...

Lager deinen Code in eine Methode ausund rufe diese Methode 2x mit unterschiedlichen Parametern auf.


        private void MyExportTestMethodXyz(string strFile_IB, string strFolder, string filenameSuffix) {
            for (int i = 0; i < 6; i++) {
                string SourcePath = @"D:\S7_Export\Sensopart\x015id02xa1\";
                string strZusatz = $"{strFile_IB}_x015id02xa1_Job{i + 1}_{filenameSuffix}.jpg";
                string strDummy = $"15id02_Job{i + 1}_{filenameSuffix}_Dummy.txt";
                string SourceFullPath = SourcePath + strZusatz;
                string TargetFullPath = @"D:\S7_Export\AppData\" + strFolder;
                string result = Path.GetFileName(SourceFullPath);
                string[] fileEntries = Directory.GetFiles(SourcePath, strZusatz, SearchOption.TopDirectoryOnly);

                if (fileEntries.Length > 0)
                {
                    Directory.Move(SourceFullPath, Path.Combine(TargetFullPath, result));
                }
                else
                {
                    //Dummydatei im Zielordner erstellen
                    File.WriteAllText(Path.Combine(@"D:\S7_Export\AppData\", strFolder, strDummy), string.Empty);
                }
            }
        }

und dann aufrufen:


MyExportTestMethodXyz(strFile_IB, strFolder, "Pass");
MyExportTestMethodXyz(strFile_IB, strFolder, "Fail");

Und du solltest wirklich diese ungarische Notation entfernen.

19.05.2021 - 10:08 Uhr

Dein Substring-Gefummel funktioniert nicht mehr, wenn dein sourceDirectory ein Schrägstrich am Ende enthält.

Außerdem: Welcher der Sätze ist leichter für dich zu verstehen:

  1. "Wenn du mir einen Pfad gibst, dann liefere ich dir den Dateinamen des Pfades zurück"

  2. "Wenn du mir einen String gibst, dann gebe ich dir einen Teilbereich zurück. Den Start des Teilbereichs errechne ich anhand der Länge eines anderen Strings und addiere magischerweise 1 darauf."

Du und andere werden später dankbar sein, wenn dein Code selbsterklärend ist und sie nicht erst überlegen müssen was das Substring eigentlich macht.

17.05.2021 - 19:12 Uhr

ManagementScope scope = new ManagementScope(@"\\.\root\microsoft\windows\storage");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM MSFT_PhysicalDisk");
string type = "";
scope.Connect();
searcher.Scope = scope;

foreach (ManagementObject queryObj in searcher.Get())
{       
    switch (Convert.ToInt16(queryObj["MediaType"]))
    {
        case 1:
            type = "Unspecified";
            break;

        case 3:
            type = "HDD";
            break;

        case 4:
            type = "SSD";
            break;

        case 5:
            type = "SCM";
            break;

        default:
            type = "Unspecified";
            break;
    }
}
searcher.Dispose();

Quelle: What is the easiest way in C# to check if hard disk is SSD without writing any file on hard disk?