Wenn Du gewisse Systemrechte benötigst, dann kannst Du das dem Betriebssystem beim Start der Applikation mitteilen, sodass diese Informationen direkt zur Verfügung stehen.
@Abt: hast Du dafür irgendwelche Quellen / Seiten auf denen ich mich schlau machen kann ?
MfG Christian
(...)
Das ist in meinen Augen dann einfach nur ein (selbstverschuldeter, oder durchaus auch unternehmerische) Fehler des Zeitmanagements.
Ich seh zB. so viele Teams, dessen Verantwortliche 120% der Zeit der Entwickler mit Inhalte vollballern.
Die Entwickler haben also nie ne Chance sich zeitlich weiterzubilden oder sich um grundlegende Dinge zu kümmern: da hat der Entwickler keine Schuld, das ist ein klassischer Unternehmensfehler.
Dem habe ich nichts hinzuzufügen ... 😎 - muß aber damit leben (wie so viele andere auch ...)
MfG Christian
Im Endeffekt ist es nur die Trennung von Authentifizierung und Authorisierung; das ist die Basis jedes Berechtigungssystem, was wirklich jeder Entwickler im Griff haben muss (meine Meinung!). Wenn ein Entwickler nicht weiß, was Authentifizierung und Authorisierung sind und worin sie sich unterscheiden, dann fehlt extrem viel Basis für jede Sicherheit, jede Architektur und jeder realen Betriebsumgebung.
Entschuldige @Abt: aber das ist mir zu Pauschal...
Ich gehöre zu der älteren Generation (1965) , die das objektorientierte Programmieren mehr oder weniger rudimentär gelernt haben.
Wir (ich) habe(n) schon mitbekommen, das sich seit Vista grundsätzlich etwas geändert hat (und auch die Gründe) ...
Nur hatten wir den Nachteil, das wir nicht, so wie die jüngere Generation, in der Uni etwas darüber lernen konnten.
Und Du als MVP hast sicherlich noch mehr Hintergrund Wissen als der gemeine Programmierer, richtig ?
Ich habe leider nicht die Möglichkeit noch einmal die Schulbank zu drücken (obwohl das sicherlich seinen Reiz hätte...) - ich muß meine Brötchen verdienen ... 😉
MfG Christian
Hallo @inflames2k:
Danke für deine schnelle Antwort ...
Das werde ich wohl nie begreifen, warum ein Admin nicht alles auf einem Rechner sehen kann - zumal er es mit dem Windows-Explorer offensichtlich kann 😢
Bei Outlook kann ich es ja noch verstehen (Spammer-Programme) aber beim OFD schon nicht mehr ...
MfG Christian
Hallo zusammen,
Vorweg, ich weiß nicht, ob das hier her gehört, aber ich fand das hier am passendsten ...
Ich habe beim Kunden folgendes Problem:
der OpenFileDialog zeigt nicht alle Laufwerke an (siehe angehängtes Bild - links ist der OFD, rechts der Windows-Explorer) ?
Gibt es beim OFD irgendeine Einstellung die ich übersehen habe ?
Das Programm wird mit Admin-Rechten gestartet, daran sollte es also nicht liegen, oder?
Ob das Laufwerk mit User-Rechten angelegt oder vom Admin eingebunden wurde, kann ich nicht sagen ...
MfG Christian
Hallo,
danke für die Tips ...
Zur EWS-Schnittstelle:
irgendwie begreife ich nicht, was AutodiscoverUrl jetzt wirklich für einen Wert von mir erwartet ?
(bei Google hab ich schon alles gesehen von Web-Adressen, Email-Adressen, UserName, etc... wobei das wahrscheinlich mit den verschieden Exchange-Servertypen (Netzwerk, Internet) zusammen hängt)
Ich will auf einen lokalen (in Netzwerk) Exchange-Server zugreifen , also ...
//Initialize Service
ExchangeService service = new ExchangeService();
//Use Integrated Authentification
service.UseDefaultCredentials = true;
und dann muss ich anscheinend den Zugriff benennen:
//Autodiscover Settings
service.AutodiscoverUrl(xxxx, RedirectionUrlValidationCallback);
Was kommt da jetzt rein ?
nehme ich meine E-Mail-Adresse läufts auf einen Fehler... > Fehlermeldung:
the autodiscover service couldn´t be located.
Was wohl bedeutet, das dieser Dienst nicht installiert / freigeschaltet ist (also mit der IT reden ...)
Wobei ich auch irgendwie nicht verstehe, warum ich das brauche / dort was eintragen muss, denn ich will ja mit
service.UseDefaultCredentials = true;
die gespeicherten Anmeldedaten benutzen ...
Ich will ja nicht für jeden Rechner, auf dem dieses Programm ausgeführt wird, die Userdaten / E-Mail-Adressen / Passworte fest hinterlegen.
Gibt es keine Möglichkeit über das Intranet sich einfach "nur" einzuloggen ? Der User hat ja schon durch seine Anmeldung das Recht auf Exchange zuzugreifen, sonst würde Outlook ja nicht arbeiten, oder ?
Kann da jemand mal bitte Licht ins Dunkel bringen ?
MfG Christian
Hallo zusammen,
ich erstelle per Microsoft.Office.Interop.Outlook E-Mails (soweit ja kein Problem...)
public void send()
{
try
{
if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Count() > 0)
{
try
{
lo_OutApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
}
catch (COMException ex) { Fehlermeldung.ErrorMessage(ex); }
}
else
{
try
{
lo_OutApp = new Microsoft.Office.Interop.Outlook.Application();
}
catch (COMException ex) { Fehlermeldung.ErrorMessage(ex); }
}
if (lo_OutApp != null)
{
lo_NSpace = lo_OutApp.GetNamespace("MAPI");
(usw)...
}
}
catch (Exception ex) {Fehlermeldung.ErrorMessage(ex); }
}
beim Massenversand habe ich nun feststellen müssen , das der Aufruf
lo_OutApp = new Microsoft.Office.Interop.Outlook.Application();
recht lange dauert (gefühlt fast zwei Sekunden) ...
Also habe ich folgendes versucht, um das etwas zu beschleunigen ...
public class sendmail
{
#region Outlook
Microsoft.Office.Interop.Outlook.Application lo_OutApp = null;
Microsoft.Office.Interop.Outlook.NameSpace lo_NSpace = null;
Microsoft.Office.Interop.Outlook.MAPIFolder lo_Folder = null;
public Boolean Outlook_starten()
{
Boolean x_retwert = true;
if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Count() > 0)
{
try
{
lo_OutApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
}
catch (COMException ex) { x_retwert = false; }
}
else
{
try
{
lo_OutApp = new Microsoft.Office.Interop.Outlook.Application();
}
catch (COMException ex) { x_retwert = false; }
}
return x_retwert;
}
public void send()
{
if (lo_OutApp != null)
{
lo_NSpace = lo_OutApp.GetNamespace("MAPI");
(usw)...
}
}
}
public void xyz()
{
sendmail x_sendmail = new sendmail();
if (x_sendmail.Outlook_starten())
{
foreach()
{
...
x_sendmail.send();
...
}
}
}
Das funktioniert bei der ersten E-Mail einwandfrei, bei der zweiten knallt es dann beim Aufruf von
lo_NSpace = lo_OutApp.GetNamespace("MAPI");
mit folgender Fehlermeldung: > Fehlermeldung:
********** Fehlermeldung vom : 03.06.2021 10:22:20 **************************************************
Meldung: Der RPC-Server ist nicht verfügbar. (Ausnahme von HRESULT: 0x800706BA)
bei Microsoft.Office.Interop.Outlook.ApplicationClass.GetNamespace(String Type)
****************************************************************************************************
Google zählt verschieden Dinge auf, die aber irgendwie nichts mit Outlook zu tun haben...
geht so etwas nicht, oder was übersehe ich ?
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?)...
MfG Christian
(...)Wenn du jetzt aber sagst du hast 30 Parameter, dann vermute ich, dass diese wohl einen großen Einfluss auf den eigentlichen Ablauf des Querys haben.
Z.B. könnte ich mir vorstellen das aus einer TabelleA nur 1 Datensatz benötigt wird und bei einem neuen Lauf mit geänderten Parameter benötigt man vielleicht 10.000 Datensätze.
genau so ist es - die Parameter sind vereinfacht gesagt von/bis-Eingrenzungen
(...)Mein Tipp ist, wenn das Query schnell genug ist und es wird mit OPTION (RECOMPILE) behoben, dann lass es so. (...)
Ich werde es mal testeten u. berichten ...
(...)Wenn nicht, dann solltest du dir Gedanken machen wie du das große Query in kleinere unterteilen kannst.
Oder vielleicht mal die ganze Architektur überdenken, weil vernünftig hört sich das mit 30 Parameter nicht an 😉(...)
Ich habe (bis jetzt) die Erfahrung gemacht, das es immer noch schneller ist, ein großes SQL-Script zu benutzen, als die Daten unter c# zu verarbeiten / zusammen zu führen..
(was sich dann jetzt wohl durch den Speicherhunger von DataTables teilweise erklärt...)
(...)Wegen Skripte für Performance Fragen empfehle ich meinen Kunden immer die Skriptsammlung von Brent Ozar.
Für dich wäre z.B.
> interessant.
Danke (werde ich mir mal in einer ruhigen Minute zu Gemüte führen)...
MfG Christian
(...)
Ob das schneller ist weiß ich nicht. Aber man kann dem Anwender eine Progressbar anzeigen und einen Abbruch Button zur Verfügung stellen.Bei mir hat alles was länger als 2 Sekunden dauert eine Progressbar.
Auch ein guter Einwand ... 👍
(...)
Außerdem prüfe ich den Hauptspeicherbedarf. Wenn ein Anwender versucht eine Liste mit 100 Millionen Datensätzen anzuzeigen kommt eine entsprechende Fehlermeldung.
Wie kannst Du das denn, wenn doch der Reader strikt vorwarding ist, du also noch gar nicht weißt, wie viele Daten kommen werden?
MfG Christian
Das hört sich eher nach einem Problem mit Parameter Sniffing an.
Probier doch mal OPTION (RECOMPILE) -
>Wirst ja hoffentlich nicht ständig den SQL Server neustarten wollen ...
Schönen Gruß
Tom
Hi,
tatsächlich will ich das natürlich nicht ...
Danke für den Tip /Link 👍 - wieder was dazu gelernt ...
Wenn ich das richtig verstanden habe, dann löscht "RECOMPILE" den Batch aus den SQL-Server-Speichern, so das beim nächsten Aufruf es wieder frisch eingelesen und verarbeitet werden kann ...
Das ist natürlich für eine dauerhafte Programmierung kontraproduktiv (damit wäre ja der Geschwindigkeitsvorteil dahin...)
Weißt Du in welcher sys-Tabelle solche Batches gespeichert werden ? (in der sys.objects augenscheinlich nicht) - dann könnte man ja dort gezielt ein "sp_refreshview" durchführen 7 oder den Eintrag löschen ...
MfG Christian