Process proc = UserAccountControl.CreateProcessAsStandardUser("calc.exe", "");
sobald die beiden Bibliotheken eingebunden sind, steht diese Funktion zur Verfügung.
haha, de mit der eigenen Exe ist, nett aber wie von dir gesagt "unschön".
Währe gerade passend gewesen, wenn man das gleich komfortabel hätte verwenden können. Aber so ist es def. besser als zuvor.
Danke für diesen für diesen Link. Auf diese Art und weise funktioniert es in der Tat.
Nun habe ich noch die Unschönheit, dass ich bei dieser Lösung die Applikation angeben muss welche ich starten will.
Was heiss das genau: Meine Applikation startet mit Admin-Rechten. Wenn ich nun diesen Befehl ausführe, wird zwar der Prozess unter dem aktuell angemeldetem Benutzer gestartet, jedoch ist die GUI des Adobe Readers nicht ersichtlich.
Starte ich jedoch die gleiche Applikation ohne Admin-Rechte, funktioniert alles so wie es soll.
Nun die Frage:
Wie muss ein solcher Aufruf unter Windows 8.x richtigerweise implementiert werden?
Ziel soll sein, einfach ein PDF öffen zu können, egal ob die Applikation welche das durchführen soll, über Admin-Rechte verfügt oder nicht.
PS:
Folgendes habe ich bereits probiert, ebenfalls ohne Erfolg
danke erst mal für die rasche Antwort.
Dass es unüblich ist, dass sich der Server zu den Clients verbindet ist mir bewusst, wurde aber dann zu mal bewusst so gemcht, weil ich den Konfigurationsaufwand am Client so gering wie möglich halten wollte (der User soll keine IP eintragen müssen).
Wenn das Ganze nun in die Cloud verschoben wird, gebe ich dir absolut recht, dass ich das dann "Regelkomform" machen werden und sich die Clients zum Server verbinden.
Kennt jemand von euch evtl. einen Entwickler welcher mit Windows Azure Erfahung hat?
Oder noch besser ein Portal wo man solche Aufträge einstellen kann, denn ich habe eigentlich nicht vor diese Mutation / Neuentwicklung selber zu machen, sondern eher jemandem abgeben, der sich damit auskennt - gegen Bezahlung natürlich ;-)
bei einer Verständnisfrage bräuchte ich eure Hilfe / Erfahrungen.
Zur Zeit habe ich eine Windows Applikation welche die folgenden Aufgaben übernimmt:
Im Grundsatz ist es ein Watchdogprogramm welches div. Stati auf verschiedenen Servern / PC's kontrolliert und ggf. Alarmmeldungen ausführt o.ä. Diese Applikation besteht aus mehreren Programmen:
- Windows Dienst (installiert auf einem zentralem Server): Ist die Hauptschaltzentrale und wertet div. Informationen aus, die von den einzelnen Clients geschickt werden (CPU Load, Prozess x gestartet / gestoppt, SNMP Anfragen etc.)
- Agent Applikation / Dienst: Dieser bekommt die Aufgaben vom Hauptdienst zugewiesen und überwacht die nötigen Kriterien auf diesem Client und schickt die Statusmeldungen zurück an den Hauptdienst.
- Alarmclient: Dieser ist ein einfacher Anzeigeclient auf Basis einer Tabelle, welche die aktuellen Stati darstellt (ist ein Alam anstehend, wurde er bestätigt, von wem etc.)
- Konfigurationsoberfläche: In dieser werden die Aufgaben definiert und dann in eine Konfigurationsdatei geschrieben, welche der Hauptdienst beim starten einliesst und dann diese Arbeiten übernimmt.
Nun zu Frage:
Ich habe vor diesen Hauptdienst in eine Cloud zu verlegen. D.h. dieser Hauptdienst soll nicht mehr lokal auf einem Server laufen, sondern in einer Cloud wie z.B. Windows Azure.
Wie wir das am besten angegangen? Ein Webservice kann es ja nicht sein, da dieser nicht immer läuft, oder? Ein Webservice nimmt Befehle entgegen und macht damit etwas.
Mein Hauptdienst macht aber mehr als nur Daten entgegennehmen. Er prüft ob die Clients verfügbar sind etc.
Aus meiner Sicht wäre ein Windows Azure Cloud-Dienst das richtige. ist das so, oder gibt es ggf. Alternativen?
Kann mir jemand Grob die unterschiede zwischen Webservice und einem Windows Azure Cloud Dienst sagen.
Gibt es überhaupt alternativen zu dem Azure Cloud Dienst?
Ich hoffe ich konnte einigermassen beschreiben was ich suche und von euch wissen will ;-)
Das mag wohl richtig sein, jedoch lasse ich meine Programme nicht immer im Debug-Modus laufen. In den meisten Fällen ist mein Programm mit einem Ofuscator geschütz, dann hilft nur noch mein Logbuch oder eben die Thread ID's von Process Explorer und damit eine (noch unbekannte) Zuweisung.
mittlerweile habe ich die Methode gefunden welche die Probleme verursacht.
Es geschieht bei dem setzen der Dateiberechtigungen, warum das genau passiert muss ich noch erforschen.
@weismat:
Das mit den Logmeldungen ist eigentlich schon drinn. Jedoch ist eben die Zuordung schwierig, weil ich im Process Explorer lediglich eine ThreadID (TID) sehe, dann aber nicht weiss welcher von meine Threads so beschäftigt ist.
@FZelle:
Das mit dem Namen ist soweit klar, jedoch fehlt mir ja dann immer noch die Zuordnung zur Thread ID welche mir im Process Explorer angezeigt wird.
gibt mir der bgw diese Infos nicht direkt, oder ich weiss nicht wie.
Als halber "workaround" geht es über die veraltete GetCurrentThreadId(). Wie aber die msdn schreibt (AppDomain.GetCurrentThreadId Method) sind diese ThreadID's nicht eindeutig. Somit bekomme ich auch bei meinem Programm mehrere gleiche ID's.
Liefert der bgw überhaupt solche Infos oder müsste ich alles selber mittels Threads machen?
Das mit dem Profiler kenne ich bereits aus einem früheren Thread von hier und werde ich auch noch anwenden.
Dazu verwende ich den von RedGate ANTS.
Trotzdem möchte ich div. Infos in ein Logbuch schreiben, desshalb ist die Frage nach wie vor noch offen, wie ich z.B. an die CPU Zeit eines bgw's heran komme.
wieder bin ich auf der Suche nach einer Lösung zu meinem Problem.
In meinem Programm gibt es einige Backgroundworkers (bgw) welche dynamisch gestartet werden.
Nun ist es so, dass ich insofern einen Fehler irgenwo im Code habe, dass die CPU Auslaustung eines Threads irgendwann auf 25% steigt.
Ich habe nun schon div. Infos ausgegeben wie:
- ManagedThreadID
- AppDomain.GetCurrentThreadId() (ich weiss ist veraltet)
- Startzeitpunt des bgw's
Im Process Explorer werden mir die einzelnen Threads meines App aufgezeigt mittels TID (Thread ID). Wenn ich mich nicht täusche, ist das AppDomain.GetCurrentThreadId().
Anhand der ManagedThreadID finde ich nicht heraus welcher bgw das schlussendlich ist.
Es müsste doch irgendwie möglich sein, z.B. die CPU-Zeit jedes bgw's auszugeben, so dass ich dann herausfinden kann in welchem bgw der Fehler passiert.
Ein weiteres Problem ist, dass ich z.B. 20 bgw's starte, Process Explorer mir aber insgesammt 35 Threads anzeigt. Das heisst, dass auch .Net selber noch irgendwelche Threads "von sich aus" startet. Evtl. sind das auch Timer welche zusätzlich verwende.
Ich glaube das oben ist ein bisschen kompliziert beschrieben.
Eigentlich ist meine Frage relativ simpel.
Wie kann ich von jedem Thread welches von meinem Programm gestartet wird eine eindeutige Zuordung erhalten (welche Methode / Klasse wird in diesem bgw ausgeführt)?
Wie geht ihr bei solchen Problemen an die Lösungssuche heran?
obwohl dieser Beitrag schon etwas älter ist, bin ich momentan beim gleichen Problem. Da das Thema da nicht mehr weiter besprochen wurde, möchte ich es gerne nochmals aufnehmen.
Wo ist der richtige Ort um Daten benutzerunabhängig abzuspeichern, wo aber jeder Benutzer lesen und scheiben kann?
Wenn ich Special Folders richtig verstehe, müsse das der CommonApplicationData sein. Jedoch eben wie im Beitrag beschrieben hat ein Benutzer standardmässig keine Schreibberechtigung auf diesen Ordner (und Unterordner)
ich konnte natürlich nicht alle Zeitplancontrols der von dir genannten Seiten detailliert anschauen. Alle jene die ich bis jetzt angeschaut habe beziehen sich auf Einträge zu Daten, oder dann sind es Timer die zu einem bestimmten Teitpunkt losgehen.
Sourcegrid kannte ich bis jetzt nicht, das werde ich mir genauer anschauen -> danke für den Input.
Das Zeitplancontrol welches ich suche, sollte lediglich aus den sieben Wochentagen bestehen mit je 24 Stunden in welchem dann eben angegeben kann an welchem Wochentag etwas aktiv sein soll (wie im Bild dargestellt, rot=aktiv, grün=inaktiv)
alle jene die ich bis jetzt angeschaut habe bestehen aus einem Datumskalender a la Outlook (Devexpress, Mindfusion etc.)
Ein solcher Zeitplan wie ich suche kann rel. einfach mittels Datagrid realisiert werden. Wenn es aber schon eine solche Komponente geben sollte und ich sie bis jetzt noch nicht gefunden habe, muss ich sie ja nicht neu erstellen -> Darum hier im Forum die Frage.
es geht mir grundsätzlich nur mal um den Lösungsweg geht. Das "wie" ist mir eigentlich soweit bekannt.
Was ist die optimale Vorgehensweise, wenn ich hunderte SNMP Anfragen durchführen muss. Es handelt sich um SNMP Abfragen welche, sagen wir mal, alle 10 Sekunden gemacht werden sollen.
1. Variante:
Alle Abgrafen sequenziell abarbeiten. Da sehe ich das Problem, dass wenn mehrere Hosts nicht erreichbar sein sollten, die restlichen Abfragen stehen bleiben. Weiter könnte es so oder so zu langsam sein, sagen wir mal, 400 Anfragen innerhalb von 10 Sekunden prüfen...
2. Variante:
Jede Abfrage in einem eigenen Thread laufen lassen. Da sehe ich ggf. das Problem mit den Threads. Ich weiss nicht ob das "sinnvoll" ist z.B. 400 Threads in einem Programm zu starten.
3. Variante:
Eine Mischung aus den Varianten 1 und 2: Abfrageblöcke zusammenstellen. D.h. 10 oder 20 Anfragen in einen Thread packen und diese 10-20 dann sequenziell abarbeiten.
Gerne nehme ich aber eure Vorschlage entgegen. Wie machen es die "Grossen" wie z.B. HP OpenView oder Nagios?
Danke für die Ausführungen. Jedoch habe ich die gewünschte Antwort nicht gefunden. Ich weiss nicht wie ich die Frage noch anders formulieren könnte.
Um den Beitrag aber noch abzuschliessen hier die "fehldenen" Infos:
- Windows 7 Ultimate x64
- USB UMTS Modem mit SIM-Karte welches bei der Installation einen COM-Port im System anlegt für Kommunikation (AT-Befehle)
- C# Anwendung welche ein Hyperterminal beinhaltet welche sich über diesen installierten COM-Port mit der SIM-Karte "unterhält" und Befehle sendet.
eigentlich spielt die Umgebung keine Rolle wo das anschliessend drauf läuft. Es ist lediglich ein USB-Gerät welches wie gesagt im System ein Comport erstellt über welcher ich dann mittels z.B. Hyperterminal kommunizieren kann.
Gemäß div. Seiten im Internet wie z.B. Beispiele zu den AT-Befehlen gibt es dafür definierte AT-Befehle welche ich verwende.
Evtl. habe ich die Frage zu wenig klar ausgedrückt:
Kennt sich jemand mit diesen AT-Befehlen bzw. mit den SIM-Karten aus, um zu sagen, ob es die SIM-Karten beinträchtigt wieviel und wie oft eine Anfrage an die SIM-Karte gesendet wird ob neue SMS angekommen sind?
Den Zusammenhang mit [Hinweis] Wie poste ich richtig? Punkt 8 sehe ich demzufolge nicht, ich habe die Fragen von talla beantwortet und im Grunde geht es um das Abfragen der SIM-Karte wie im Titel auch beschrieben.
Versteh mich bitte nicht falsch, aber ich versuche mich schon an die Regeln zu halten und bin der Meinung, dass ich das in diesem Beitrag auch erfülle.
Die Geräte welche die SIM-Karte drinn haben legen einen Comport im System an. Mittels Hypterterminal sende ich dann die gewünschten AT-Befehle. Ich gehe davon aus, dass das ein direkter Zugriff auf die SIM Karte ist und nicht über eine API.
In wieweit beeinträchtigt das Abfragen von SMS die SIM-Karte?
Ich meine ich muss ja pollen um zu erfahren wenn eine neue SMS eingegangen ist. Haben die SIM-Karten auch eine Art max. Lesezugriffe?
dieser Beitrag ist ja schon ein wenig älter, jedoch geht es um genau das was ich suche.
Es gibt ja x-SMS Gateways im Netz.
Wie sieht eure Erfahrung mit solchen SMS-Gateways aus? Ich suche einen für Komerzielle zwecke welcher zuverlässig funktioniert und auch SMS empfagnen kann.
Wer hat bereits Erfahrungen mit solchen Anbieter gesammelt?
im Forum wurde schon paar mal darüber diskutiert wie man SMS mittels SMS-Gateway versenden kann.
Nun bin ich auf der Suche nach Hardware, welche ich dann per C# ansprechen und dementsprechend dann SMS versenden kann.
Die Anforderung an die Hardware ist eigentlich gering:
- Kostenpunt: zwischen 0 - 100 €
- Am einfachsten mittels USB verbinden
es wäre schön wenn...
ich verwende die DevExpress Textbox und diese erlaubt direkt das Prüfen der Eingabe mittels Regex.
Das mit ToUpper habe ich momentan so gelöst, jedoch funktioniert das erst wenn die Textbox verlassen wird, warum auch immer.
Der Event wird zwar bei jeder Tasteneingabe gefeuert jedoch bewirkt das ToUpper nichts...