Laden...

Forenbeiträge von RayYago Ingesamt 19 Beiträge

13.01.2020 - 19:11 Uhr

Das Ende wäre doch dann erreicht sobald keine weiteren Vorgänge/Paletten mehr gefunden werden. Oder verstehe ich dich falsch?

13.01.2020 - 18:46 Uhr

verwendetes Datenbanksystem: MS SQL

Hallo liebe Foren-User,

folgender Sachverhalt den ich einfach nicht gelöst bekomme mit einer sauberen Abfrage.

Zusammenfassung:
Anhand einer Auftragsnummer (Order_nb) möchte ich verknüpfte Vorgänge ermitteln die über Europaletten verknüpft sind und dann damit alle verwendeten Paletten ermitteln. Die Tiefe der Rekursion ist dabei allerdings variable.

Erklärung:
Es ist so, das eine Palette mehrere Vorgänge beinhalten kann. Eine Vorgang kann aber auch auf mehreren Paletten sein. Sind mehr als ein Vorgang auf einer Palette, gehören die Vorgänge zusammen, da Vorgänge aber auch auf mehreren Paletten sein können, entsteht eine Rekursion. Anhand der Vorgänge möchte ich somit alle verwendeten Paletten ermitteln die insgesamt für alle Verknüpften Vorgänge verwendet wurden.

Hier mal eine kleine Illustration: Dateianhang

Hier sieht man noch einmal das ein Vorgang auf mehreren Paletten sein kann. Eine Palette beinhaltet mehrere Vorgänge.

Ziel:
Mein Ziel ist es alle Paletten zu ermitteln die insgesamt verwendet wurden.

Vermutung/Versuch:
Gegeben ist immer eine Vorgangsnummer, anhand dieser kann ich die ersten Paletten finden, danach müsste ich die Paletten durchgehen und gucken was auf diesen Paletten für Vorgänge sind. Und ab da beginnt es wieder von vorne, ich müsste anhand der Vorgänge die Paletten ermitteln und anhand der Paletten die nächsten Vorgänge etc etc etc..

Ich bekomme diese Rekursion einfach nicht hin, auch mit einer CTE nicht, da ich immer diesen Schritt über die Palette habe.

Ich habe folgendes SQL erstellt das statisch ein paar Tiefen ermittelt, aber das ist sehr unschön und auch garnicht flexible, zeigt aber vielleicht besser was ich genau meine.

SELECT y.order_nb, y.pallet_nb 
FROM 
	(select DISTINCT c.order_nb, c.pallet_nb  
	FROM
		(select o.order_nb, o.pallet_nb 
		from
		(SELECT 
			order_nb,
			pallet_nb
		FROM order_pallet
		WHERE pallet_nb = 130290) t
		INNER JOIN order_pallet o on t.order_nb = o.order_nb) q
	INNER JOIN order_pallet c on q.pallet_nb = c.pallet_nb) x
INNER JOIN order_pallet y on x.order_nb = y.order_nb

Hier meine kläglichen Versuche das ganze rekursiv zu bekommen:

WITH cte AS (
SELECT
order_nb,
pallet_nb
FROM order_pallet
WHERE order_nb = 655843

UNION ALL

SELECT h.order_nb, h.pallet_nb
FROM
(SELECT
e.order_nb,
e.pallet_nb
FROM order_pallet e
INNER JOIN cte o ON e.pallet_nb = o.pallet_nb) b
INNER JOIN order_pallet h on b.order_nb = h.order_nb
)
select * from cte

Eine normale Rekursion bekomme ich hin, aber ich muss abwechselnd zwei Dinge prüfen. Quasi:

-> Für einen Vorgang alle Paletten finden
-> Für gefundene Paletten alle Vorgänge finden
-> Für alle gefundenen Vorgänge alle Paletten finden
-> Für alle gefundenen Paletten alle Vorgänge finden
-> Für alle gefundenen Vorgänge alle Paletten finden

Beispiel Daten: Hier einmal eine Tabelle mit Beispielen mit denen ich ein wenig spiele:

CREATE TABLE [dbo].[order_pallet](
[id] [int] IDENTITY(1,1) NOT NULL,
[order_nb] [int] NULL,
[pallet_nb] [int] NULL,
CONSTRAINT [order_pallet_id] PRIMARY KEY CLUSTERED
([id] ASC))

INSERT INTO order_pallet VALUES (655843, 130290)
INSERT INTO order_pallet VALUES (655844, 130290)
INSERT INTO order_pallet VALUES (655845, 130290)
INSERT INTO order_pallet VALUES (655846, 130290)
INSERT INTO order_pallet VALUES (655847, 130290)

INSERT INTO order_pallet VALUES (655843, 130291)
INSERT INTO order_pallet VALUES (655901, 130291)
INSERT INTO order_pallet VALUES (655902, 130291)
INSERT INTO order_pallet VALUES (655903, 130291)
INSERT INTO order_pallet VALUES (655904, 130291)

INSERT INTO order_pallet VALUES (655101, 130292)
INSERT INTO order_pallet VALUES (655102, 130292)
INSERT INTO order_pallet VALUES (655902, 130292)
INSERT INTO order_pallet VALUES (655103, 130292)
INSERT INTO order_pallet VALUES (655904, 130292)

INSERT INTO order_pallet VALUES (655545, 130293)
INSERT INTO order_pallet VALUES (655535, 130293)
INSERT INTO order_pallet VALUES (655525, 130293)
INSERT INTO order_pallet VALUES (655103, 130293)
INSERT INTO order_pallet VALUES (655555, 130293)

Diesen Beitrag habe ich bereits gelesen: Rekursion verstehen

31.12.2019 - 18:54 Uhr

@Papst

Das hatte ich gesehen, was ich aber meinte ist das icht die Application mit einem return code beenden möchte. Aber wenn ich den HostBuilder verwende und in meiner eigentlichen Anwendung z.B.

_lifeTime.StopApplication();

gelange ich am Ende in die StopAsync Methode. Aber ich kann hier weder

Environment.Exit();

aufrufen, noch kann ich einen INT oder dergleichen zurückgeben, damit ich in der Main Methode z.B.

return 5;

zurück geben kann.
Das war die eigentliche Frage dabei. Wie ich die App mit einem return code beenden kann ohne das ich globale variablen verwenden muss.

Ich habe sowohl Doku als auch mit google alles durchforstet, bereits versucht die Methoden zu ändern damit die einen Wert zurück geben können, aber die sind ja alle durch den IHostService Interface vorgegeben. builder.RunConsoleAsync(); kann ebenfalls keine Werte zurück geben.

Ich finde einfach nicht raus wie ich das hinbekommen soll.

Ich dachte dass man vielleicht Properties setzten kann, aber ich konnte noch nicht herausfinden wie und ob das überhaupt geht.

31.12.2019 - 10:48 Uhr

Danke noch einmal für deine Hilfe Abt.

Ich habe jetzt einwenig damit herumgespielt und denke mache dass erstmal so:

COnnectionString wird irgendwo verschlüsselt gespeichert wie z.B. unter AppData, und die Application muss dann über die Arugumente mit dem Passwort gestartet werden.

Denn eine andere Software soll dieses Programm starten.

Aber ich hätte mal zweikleine Fragen zu deinem Beispiel:

Prinzipiell solltest Du bei der Grundstruktur der Konsolenanwendungen folgendes machen:
Bau Dir einen ConsoleHost, der die Konfiguration und die Dependency Injection übernimmt.
Siehe Sample hier:
>

Ich habe mal eine abgespeckte version erstellt um meine Frage deutlicher zu machen. Das Beispiel hat keine DependencyInjection.

HostBuilder:

static async Task Main(string[] args)
        {
            IHostBuilder builder = new HostBuilder()
                    .ConfigureAppConfiguration((hostingContext, config) =>
                    {
                        config.SetBasePath(Directory.GetCurrentDirectory());
                        config.AddJsonFile("appsettings.json", optional: true);
                        config.AddJsonFile($"appsettings.{Environment.MachineName}.json", optional: true);
                    })
                    .ConfigureServices((hostingContext, services) =>
                    {
                        services.AddOptions();

                        // Startup
                        services.AddHostedService<MyApp>();
                    });
            await builder.RunConsoleAsync();
        }

Frage 1:
Ich habe bzw. brauche keine Hintergrundprozesse. Meine Anwendung soll linear oder eher gesagt synchron ablaufen.
Kann ich dann in der Methode

public Task StartAsync(CancellationToken cancellationToken)

enfach meine Aufgaben die ich abarbeiten will ausführen oder wäre das eher unsauber programmiert dann?
So in etwa:

public Task StartAsync(CancellationToken cancellationToken)
        {
            StartDownload();
            MoveFile();
            LogInformation;
            //Fehler bei den Aufgaben aufgetreten
            //App soll mit einem return code geschlossen werden
            Environment.Exit(5);
            return Task.CompletedTask;
        }

Frage 2:
Wenn jezt ein Fehler in der Application auftritt, möchte ich die APP mit einem Returncode beenden:

Environment.Exit(5);

Das funktioniert allerdings nicht weil ich glaube, dass das nur den Prozess beendet der aktuell läuft und nicht die gesamte Application.

Den ReturnCode brauche ich bzw. die Anwendung die dieses Programm aufruft.

Wie könnte ich denn die gesamte Anwendung in dem Fall mit einem return code schließen?

25.12.2019 - 18:20 Uhr

Bau Dir einen ConsoleHost, der die Konfiguration und die Dependency Injection übernimmt.

Ich weiß nicht genau was ein ConsoleHost ist, aber meinst du damit das dieser dann, wie in deinem Beispiel auf GitHub, die AppSettings etc. läd und aufbereitet, damit die Informationen daraus verwendet werden können?

Speicher die sensible Daten bei Desktopanwendungen im Benutzerverzeichnis (ProgramData) oder in de Umgebungsvariablen des Nutzers.

Diese Verzeichnise sind doch auch einsehbar? Umgebungsvariablen sind doch auch als plain text zu sehen. Und eine Datei mit dem ConnectionString einfach unter ProgramData abzulegen ist wahrscheinlich auch nicht besonders sicher oder? Die müsste ich dann verschlüsseln, aber den Key für das entschlüsseln müsste ich ja dann wieder irgendwo ablegen, wo es nicht einfach gelesen werden kann? ^^

Was das Thema Sicherheit angeht bin ich wirklich nicht fit, die Anwendung selbst war kein Problem. Ich verwende bereits den gesamten Winterurlaub darauf, mehr in den Stoff zu kommen und danke dir für deine Bemühungen Abt.

25.12.2019 - 17:57 Uhr

Ich habe eine .NET Core Konsolen-Anwendung. Standardmäßig ist weder appConfig noch AppSettings vorhanden. Ich dachte das die App.Config Standard ist und habe dann einfach selber eine erstellt und dem Project hinzugefügt über Visual Studio 2019 😕

Wo sollte ich sonst sowas speichern? Ich wollte einen großen Aufwand vermeiden für ein paar so kleine Aufgaben wie die Anwendung durchführt.

Ich hatte noch gelesen das der beste Weg wäre, einen Service (ich glaub so wurde das genannt) zu erstellen, der zwischen Client und Datenbank arbeitet. Aber das wäre, meiner Meinung nach ein overkill für ein paar Inserts die die Anwendung macht...

Vielleicht bin ich auch einfach schlecht informiert. Die meisten Beiträge zu diesem Thema sind aus 2005 - 2012 und behandeln genau den Ansatz mit der App.Config, den ich hier gezeigt habe.

25.12.2019 - 16:02 Uhr

Hallo liebe User,

zu diesem Thema gibt es bereits ähnliche Beiträge, aber ich habe hier ein kleines Problem, dass ich einfach nicht lösen kann.

Ausgangssituation:
Ich habe eine kleine Anwendung geschrieben, die ein paar Cliene IO Aufgaben erledigt und dann Logs in eine Datenbanktabelle schreibt.
Die IO Aufgaben spielen hierbei keine Rolle.
Es ist wirklich nur eine sehr simple Anwendung die am Ende Informationen nach erledigten Aufgaben, in die Datenbank schreibt.
Den ConnectionString habe ich in der Datei App.config hinterlegt, als plain text.

Ein ConnectionString in plain text ist generell sehr schlecht, also habe ich mich etwas schlau gemacht und herausgefunden das man mit dem ConfigurationManager (System.Configuration), Teile der Config verschlüsseln kann.

Das funktioniert eigentlich auch sehr gut, nur wenn ich den Code ausführe der das Ver/Entschlüsseln macht, erstellt mir ConfigurationManager immer eine neue Datei die er verschlüsselt, die dann z.B. unter "bin\Debug\netcoreapp3.0" liegt und nicht im Hauptverzeichnis.

Das macht auch Sinn, da dort ja alle Dateien liegen die zum Client übertragen werden müssen.

Aber die eigentliche App.Config bleibt unverschlüsselt. Der Client hat zwar die verschlüsselte Version, aber in meinen Verzeichnissen ist die unverschlüsselte Datei zu finden.

Kann ich die App.Config nicht auch irgendwie verschlüsseln?

Beispiel:
erstellen -> C:\Project\Application\App.Config (plain text)
mit ConfigurationManager SectionInformation.ProtectSection verschlüsseln.
Neue Datei wurde unter C:\Project\Application\bin\Debug\Applicaion.config erstellt.
App.Config ist aber immer noch unverschlüsselt und für jeden Sichtbar, der Zugriff auf das Entwicklerlaufwerk hat.

Hier der Code:

private bool EncryptConnectionString(bool encrypt, string fileName)
        {
            bool success = true;
            Configuration configuration = null;
            try
            {
                configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                ConnectionStringsSection configSection = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
                if (!configSection.ElementInformation.IsLocked && !configSection.SectionInformation.IsLocked)
                {
                    if (encrypt && !configSection.SectionInformation.IsProtected)
                    {
                        configSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                    }

                    if (!encrypt && configSection.SectionInformation.IsProtected) 
                    {
                        configSection.SectionInformation.UnprotectSection();
                    }
                    configSection.SectionInformation.ForceSave = true;
                    configuration.Save();
                    success = true;
                }
            }
            catch (Exception ex)
            {
                success = false;
            }
            return success;
        }
09.11.2019 - 18:51 Uhr

Habs herausgefunden, die SQLDependency registriert keine weiteren Notifications solange der Handler noch am arbeiten ist. Das ganze ist für so eine Anzahl an Daten schon bereits nicht gut verwendbar wenn man alle Datensätze haben will.

Was anstatt dessen aber geht ist SqlNotificationRequest

Beispiel hier: SQLNotificationRequest

Persönlich getestet und funktioniert gut auch mit über 100 Inserts in der Sekunde.

09.11.2019 - 16:53 Uhr

verwendetes Datenbanksystem: SQL Server

Hallo ich spiele gerade mit SQL Dependency herum und habe das Beispiel von MS dazu verwendet:

MS SQLDependency

An sich funktioniert das, aber ich probiere gerade ein wenig aus und wenn ich viele Inserts in kurzer Zeit mache, werden nur max. zwei davon registriert.

*EDIT* Wenn ich das Console.Writeline mit dem neu abbonieren tausche, werden bis zu 20 Einträge registriert. Ist das abbonieren vielleicht zu langsam?**

Das kann doch kein erwünschtes Verhalten sein oder? Ich führe folgendes SQL 180 hintereinander aus:

insert into t3_auftr_log_ll (lade_nr, vg_lfd_nr, status) values(1,2,3)

und habe das Beispiel so bearbeitet das noch eine Connection zur Datenbank geöffnet wird und jedes mal beim Event der Event Handler neu abonniert wird:

class Program
  { 



    private string sampleConnectionString = "Server=DESKTOP-N943R2B\\SQLEXPRESS01;Database = DBDependency; User Id = sa;Password = admin; ";

    SqlConnection conn;

    public static void Main(string[] args)
    {
         var program = new Program();
        program.Initialization();

        Console.ReadLine();
    }

        void Initialization()
        {
            // Create a dependency connection.
            conn = new SqlConnection(sampleConnectionString);        
            RegisterDependencyUsingSpecificQueue();
        }

        private void RegisterDependencyUsingSpecificQueue()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }

            SqlDependency.Start(sampleConnectionString);

            using (SqlCommand command = new SqlCommand("SELECT [id],[lade_nr],[vg_lfd_nr],[status] FROM[dbo].[t3_auftr_log_ll]", conn))
        {

            // Create a dependency and associate it with the SqlCommand.
            SqlDependency dependency = new SqlDependency(command);
            // Maintain the reference in a class member.

            // Subscribe to the SqlDependency event.
            dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);

            // Execute the command.
            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Process the DataReader.
            }
        }

    }

    // Handler method
    void OnDependencyChange(object sender, SqlNotificationEventArgs e)
    {
        Console.WriteLine("Got Here!");
            // Handle the event (for example, invalidate this cache entry).
            RegisterDependencyUsingSpecificQueue();
    }

    void Termination()
    {
        // Release the dependency.
        SqlDependency.Stop(sampleConnectionString, "SQLDependencyQueue");
    }
}

Ohne das neu abbonieren geht es nur einmal. Ich kann mir nicht erklären wieso das gerade so ist. Hat da jemand vielleicht eine Idee?

07.11.2019 - 22:35 Uhr

@FZelle Danke erstmal für dein Erfahrungsbericht. Ich hätte da mal eine Frage wie du SQLDependency verwendet hast. Ich forsche gerade nach und probiere viel mit Testprojekten.

Ich sehe in manchen Projekten folgendes:


await this.sampleSqlCommand.ExecuteReaderAsync(CommandBehavior.CloseConnection);

und in anderen

using (SqlDataReader reader = command.ExecuteReader())
    //        {
    //            // Process the DataReader.
    //        }

Manche machen es Asyn und andere nicht. Macht es sind Aync zu benutzen, wenn man nur eine Tabelle überwachen möchte? Oder wäre Async in jedem Fall besser da dann mehr Datensätze abgearbeitet werden könne?

07.11.2019 - 15:04 Uhr

Es können keine korrekten Lieferscheine erstellt werden, das ganze System ist etwas älter und bietet keine Möglichkeit dafür. Zudem müssen die Lieferscheine aktuell sein, es kann sein das Ware verpackt wird aber nicht auf den LKW kommt. Im Post oben etwas falscher erklärt, der Lieferschein soll nur das beinhalten was wirklich auf dem LKW landet und das kann das eigentliche System momentan nicht. Deswegen der Umweg.

Aber das ist auch garnicht das Problem, das soll eine Übergangslösung werden bis das neue ERP System nächstes Jahr kommt.

Die variante mit MSMQ scheint mir relativ schwirig da man Einstellungen ander SQL Server Datenbank vornemmen muss, was mir leider nicht möglich ist.

07.11.2019 - 12:11 Uhr

verwendetes Datenbanksystem: SQL Server + SSMS Tools

Hallo,

ich hatte eine ähnliche Frage bereits im Smalltalk gestellt, habe jetzt aber eine Spezifische Frage dazu:

Was wäre eine gute Möglichkeit, aus einem C# Dienst heraus eine SQL Server Tabelle zu überwachen?

Die Situation ist folgende:

Es gibt eine SQL Server Tabelle die nur ein paar Spalten beinhaltet. Dort werden Einträge abgestellt wann z.B. ein Vorgang komplett verpackt wurde. Sobald dieser Eintrag in der Datenbank erscheint, muss Sekunden später ein Lieferschein gedruckt werden. Es kann mehrere Einträge die Minute geben.

Nun möchte ich jeden neuen Eintrag gerne mitbekommen. Die Tabelle hat ein Verarbeitungsstatus, mit dem ich Abfragen kann, welche Einträge ich bereits abgearbeitet habe und welche offen sind.

Diese Eintrage möchte ich abfragen und dann dafür halt in der C# Anwendung (ich wollte ein Dienst dafür erstellen), die Daten weiter verarbeiten.

Ich Scrolle schon ein wenig durch das Web und die häufigsten Methoden scheinen zu sein:

  • SqlDependency
  • long polling

in vielen Artikeln habe User nur schlechtes über SqlDependency geposted, das Einträge häufig nicht erkannt werden etc.

Hat jemand Erfahrung damit?

Eine andere möglichkeit dachte ich mir, wäre vielleicht eine C# http Schnittstelle zu bauen und im SQL Server einen Tabellen Trigger zu verwenden, der für jeden Eintrag ein http Request schickt. Aber auch hier sagen die meisten "der SQL Server ist nicht dafür gemacht"

Kann mir jemand einen Tipp geben oder vielleicht Erfahrungen mitteilen. Ich soll den Aufwand abschätzen, bin mir aber nicht einmal sicher, wie ich genau vorgehen soll...

Danke im voraus!

04.11.2019 - 20:31 Uhr

Naja aber das Ding ist, es gibt keinen anderen Punkt an dem es machbar wäre ohne einen enormen Zeitaufwand zu haben. Eine externe Schnittstelle auf die ich keinen Zugriff habe, gibt nur Werte in die Datenbank ab, mehr nicht. Die Schnittstelle ist weder anders ansprechbar, noch kann sie irgendwie jemand anderen ansprechen.

Ich habe weder Zugriff auf das Fertigungsleitsystem als auch auf das ERP System. Es muss eine Schnittstelle her, die einfach ist und möglichst wenig Zeit zu bauen, in Anspruch nimmt.

Deswegen die Idee mit dem Tabellen Trigger. Jedesmal wenn ich einen neuen Datensatz bekomme (sind vielleicht 1-3 jede 5 Minuten nur), kann ich sofort und ohne Verzögerung das ERP informieren bzw. die Schnittstelle dafür, das diese jetzt etwas machen soll.

Vielleicht wäre ein Aufruf für Putty über den Trigger nicht schlecht.

04.11.2019 - 20:11 Uhr

So in etwa läuft das ab, ich hab die Schnittstelle zum ERP mal außen vor gelassen weil ich dachte dass eher unrelevant ist. Es gibt eine spezielle Schnittstelle von dem ERP System, die auch durch das Unternehmen bereitgestellt wurde die das ERP entwickelt hat. Diese Schnittelle kann man z.B. anstupsen und sagen "druck mir bitte den Lieferschein für diesen Vorgang". So in etwa halt.

Und ich würde diese Schnittelle gerne vom SQL Server aus anstupsen. Problem nur dass das zum einen zwei unterschiedliche VM's sind und ich mich auf einem Windows Betriebssystem befinde und die Schnittstelle nur über die VM mit dem Solaris erreichbar ist.

Ich versuche gerade über Putty eine Verbindung hinzubekommen die ich dann über die SQLCMD Funktion im SQL Server aufrufen möchte.

04.11.2019 - 19:14 Uhr

Hallo, was ich jetzt seit einiger Zeit auf der Arbeit versuche ist, einen Befehl auf einer Solaris Maschine auszuführen.

Ich befinde mich auf einer SQL Server 2012 Maschine und möchte über ein SQL-Skript ein kleinen Befehl auf einer Solaris Maschine durchführen. Alle was ich bis jetzt gefunden habe, ist dass das nur über Drittanbieter wie Putty möglich sein soll. Gibt es vielleicht eine andere Möglichkeit? Ich möchte auf der Solaris eine Schnittstelle über ein Befehl ansprechen, damit ein anderes ERP-System weiß wann und was es jetzt machen soll. Ein extra Programm dafür zu erstellen wäre ein over kill und ist von der Zeitlichen Verzögerung nicht geeignet. Ich wollte das über ein SQL-Server Tabellen Trigger ausführen, da die Daten die das ERP System erstellen soll, Zeitlich sehr kritisch sind, kann ich nicht Zeigergesteuert arbeiten.

Oder anders gesagt, ich wüsste mir nicht anders zu helfen wenn das nicht funktioniert, da ich noch nicht so erfahren bin.

Ich danke jedem für seine Hilfe.

02.08.2019 - 20:29 Uhr

oh das wusste ich gar nicht das CMD bald nicht mehr sein wird.

Aber einfach code . auszuführen habe ich auch bereits versucht. Die batch bleibt trotzdem offen, solange bis ich VSCode geschlossen habe 😕

02.08.2019 - 20:06 Uhr

oh okey, ich meinte eigentlich das ich nur mit einer batch visual studio code starten möchte über den befehl "code ." und sich die batch file dann schließen soll

02.08.2019 - 19:19 Uhr

Hallo, ich würde gerne einen .Net Befehl in einer Batch File ausführen. Und zwar würde ich gerne Visual Studio Code durch eine Batch Datei ausführen.

Ich habe folgendes versucht:

Zuerst:
cd /D F:
cd F:\c#\

das funktioniert, aber dann möchte ich Visual Studio Code starten und die Batch soll sich beenden, aber das Fenster bleibt immer offen, sogar wenn ich ein Exit mache. Er wartet solange bis ich Visual studio wieder geschlossen habe.

start "" cmd /C "cd F:\c#\ && code ."
cmd /c "code ."
start code .

keiner der drei funktioniert wie gewünscht. VS startet aber das Batch Fenster schließt nicht. Ich dachte start und /c sorgen dafür das die batch einfach weiter läuft und dann geschlossen wird.

Kennt jemand eine Lösung?

22.07.2019 - 20:24 Uhr

Hallo, ich hätte mal eine kleine Frage:

Es ist so das wir momentan einen Windows Dienst am laufen haben auf einem Server im Netzwerk. Nun sollen an diesem Dienst Änderungen vorgenommen werden, aber niemand weiß so recht wie man die neue "Version" nun deployen soll, bzw. haben alle angst etwas kaputt zu machen dabei. Der eigentliche Entwickler der das damals entwickelt hat, ist nämlich schon lange nicht mehr da.

Was ich weiß ist das man einen Dienst so installieren kann über die Konsole:


"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" FileMonitorService.exe

Aber kann man das dann auch so machen wenn der Dienst bereits installiert ist? Oder muss man den vorher deinstallieren oder wie würde sowas funktionieren?

Ich danke bereits im voraus und auch im nachhinein. Über eine nette Antwort freue ich mich besonders 😃