Hi,
so ich bin's nochmal.
Ich habe inzwischen selber eine Lösung gefunden.
Wenn ihr mal das selbe Problem haben solltet, ich habe es so gelöst:
using Outlook = Microsoft.Office.Interop.Outlook;
public static Outlook.MAPIFolder GetInbox()
{
Outlook.Application app = Globals.ThisAddIn.Application;
Outlook.MAPIFolder currentFolder = app.ActiveExplorer().CurrentFolder;
Outlook.Account account = GetAccountForFolder(currentFolder);
Outlook.MAPIFolder inbox = account.DeliveryStore.GetDefaultFolder (Outlook.OlDefaultFolders.olFolderInbox);
}
private static Outlook.Account GetAccountForFolder(Outlook.MAPIFolder folder)
{
// Obtain the store on which the folder resides.
Outlook.Store store = folder.Store;
// Enumerate the accounts defined for the session.
return
Globals.ThisAddIn.Application.Session.Accounts.Cast<Outlook.Account>().FirstOrDefault(
account => account.DeliveryStore.StoreID == store.StoreID);
}
Die GetAccountForFolder Methode gibt's von MS. Ich habe die For Schleife mittels LINQ ausgedrückt.
Viele Grüße
caldi
Hi,
ich stehe mal wieder vor einem Problem.
Ich habe ein Outlook Addin mit VSTO für Outlook2010 geschrieben.
Das Addin verarbeitet die selektierte E-Mail und soll diese anschließend verschieben.
Wenn nur ein Postfach vorhanden ist, funktioniert das auch mit folgendem Code:
Outlook.MAPIFolder inBox =
Globals.ThisAddIn.Application.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Danach wird irgendwann die Move Methode des MailItems aufgerufen. Das glaube ich ist hier nicht relevant.
Das Problem tritt auf, wenn mehrere Postfächer existieren.
Es wird eine E-Mail aus dem Postfach 2 ausgewählt und verarbeitet. Es wird aber immer in den Ordner des Postfachs 1 verschoben.
Nach etwas Debuggen habe ich rausgefunden, dass die Methode ActiveExplorer noch das richtige Postfach (also in diesem Bsp Postfach 2) zurück gibt. Bei der Session Property wird aber immer das Postfach 1 verwendet.
Wie kann ich denn eine E-Mail innerhalb eines Postfachs verschieben?
Ich hoffe ihr versteht was ich meine.
Ich habe dazu auch leider nichts gefunden, sondern nur die oben genannte Möglichkeit, wie ich an den Posteingang-Ordner komme.
Danke
caldi
Ich glaube das stimmt so nicht.
Ich dachte, dass .NET 4.0 eine Standalone Version ist und daher nicht .NET 2.0, 3.0, 3.5 mitliefert.
.NET 3.5 ist nur ein "Update" und bringt deshalb 2.0 und 3.0 mit. Daher kann man mit .NET 3.5 auch .NET 2.0 Applikationen ausführen?
.NET 2.0 war auch eine Standalone Version und es konnten keine .NET 1.0 Applikationen ausgeführt werden?
Natürlich kann zusätzlich zu .NET 4.0 das ältere 3.5 installiert werden.
.NET 4.5 ist wieder nur ein "Update" und deswegen wird .NET 4.0 mitgeliefert.
Korrigiert mich bitte, wenn das falsch ist.
Ich dachte das mal gelesen zu haben ...
Hi,
ich habe ein Problem und finde Google keine Lösung.
Ich schreibe ein kleines Programm, dass mit einem SystemFileWatcher ein Verzeichnis überwacht in dem TIF Dateien abgelegt werden. Die Tif Datei soll dann in einem neuen Fenster angezeigt werden.
Dazu habe ich folgende Methoden:
private PicViewer _picViewer;
private void FileSystemWatcherOnCreated(object sender, FileSystemEventArgs e)
{
string ext = Path.GetExtension(e.FullPath);
if(ext == null)
return;
ext = ext.ToLower();
if(ext != ".tiff" && ext != ".tif")
return;
lock (_lockObject)
{
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => ShowPicViewer(e.FullPath)));
}
}
private static void ShowPicViewer(string filename)
{
_picViewer = new PicViewer();
_picViewer.ShowFullScreen(filename);
}
PicViewer ist das neue Fenster.
Hier gibt's die Methode ShowFullScreen.
public void ShowFullScreen(string filename)
{
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
imgPicture.Source = BitmapFrame.Create(fs, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
Show();
Topmost = true;
WindowState = WindowState.Maximized;
}
Es tritt eine IOException auf im Konstruktor des FileStreams.
Hier der StackTrace:
Stapel:
bei System.IO.__Error.WinIOError(Int32, System.String)
bei System.IO.FileStream.Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean)
bei System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean)
bei System.IO.FileStream..ctor(System.String, System.IO.FileMode)
bei FaxViewer.PicViewer.ShowFullScreen(System.String)
bei FaxViewer.MainWindow.ShowPicViewer(System.String)
bei FaxViewer.MainWindow+<>c__DisplayClass3.<FileSystemWatcherOnCreated>b__1()
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
bei MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
bei System.Windows.Threading.DispatcherOperation.InvokeImpl()
bei System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
bei System.Threading.ExecutionContext.runTryCode(System.Object)
bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
bei System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
bei System.Windows.Threading.DispatcherOperation.Invoke()
bei System.Windows.Threading.Dispatcher.ProcessQueue()
bei System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
bei MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
bei MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
bei System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
bei MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
bei System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
bei System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
bei System.Windows.Threading.Dispatcher.Run()
bei System.Windows.Application.RunDispatcher(System.Object)
bei System.Windows.Application.RunInternal(System.Windows.Window)
bei System.Windows.Application.Run(System.Windows.Window)
bei System.Windows.Application.Run()
bei FaxViewer.App.Main()
Das merkwürdige ist:
Ich entwickle auf einem Win7 PC mit VS2010. Hier tritt das Problem nicht auf.
Auf einem Win XP SP3 Rechner tritt die Exception nach dem 2. Mal auf.
Also das erste Bild wird angezeigt, beim Zweiten tritt die IOException auf.
Auf beiden PCs ist .NET 4.0 Extended installiert. Kompilieren tue ich das Projekt gegen das .NET 4.0 Client Profile Framework.
Ich habe auch schon mit BitmapSource mit CacheOption.OnLoad, BeginInit, EndInit.
Jedesmal das selbe Ergebnis.
Windows 7 hat's jedesmal funktioniert.
Ich hab auch schon gelesen, dass es ein Bug in der Windows Imaging Component ist. Eine Lösung habe ich dazu noch nicht gefunden.
Hat jemand eine Idee wie ich das lösen kann?
Danke
caldi
Hi,
ich habe erst kürzlich auch Interprozesskommunikation benötigt.
Das Zyan Framework von Rainbird kann das ebenfalls bewerkstelligen und ist in der Anwendung sehr einfach.
Ich konnte damit Kommunikation von zwei Anwendungen schnell und problemlos umsetzen.
caldi
Hi,
ich brauch mal wieder eure Hilfe.
Ich habe zwei unabhängige Addins mit VS2010 und VSTO für MS Outlook 2010 geschrieben.
Beide Addins sollen auf den selben Ribbon Tab, aber in unterschiedliche Gruppen dargestellt werden.
Die Ribbons habe ich bisher mit dem Designer bearbeitet und nicht in XML konvertiert.
Bisher werden 2 Ribbon Tabs angelegt, die den selben Namen haben, und auf jedem Tab gibt's eine Ribbon Gruppe für das jeweilige Addin.
Natürlich habe ich schon gegoogelt, der einzige Hinweis, den ich gefunden habe, das Problem mit dem Designer zu lösen ist hier.
Allerdings kann ich die ControlId nicht verändern.
Wisst ihr vielleicht wie ich das Problem mit dem Designer lösen kann oder muss ich wirklich das Ribbon in eine XML konvertieren?
Danke
caldi
Hat keiner mehr eine Idee?
Ich konnte das Problem immer noch nicht lösen?
Würde das vielleicht mit Wix besser gehen?
Ich habe damit bisher keinerlei Erfahrung?
Danke
caldi
Hi,
ich habe testweise die Benutzerdefinierte Aktion "Installieren" gelöscht.
Dann wird der Dienst tatsächlich nicht registriert. Getestet habe ich es ohne dass der Dienst davor installiert war.
Daher verstehe ich nicht, warum der erste Lösungsansatz von Grumbler85 nicht funktionierte.
Ich habe außerdem probiert eine Condition bei der Installieren Aktion anzulegen.
Eine MSDN-Dokumentation habe ich dazu leider nicht gefunden.
Folgende Condtions habe ich bereits probiert:*(Not Installed) OR PREVIOUSVERSIONSINSTALLED
*Not Installed
*NOT Installed
Ich habe gelesen, dass die Anweisung case-sensitive ist.
Vermutlich sind die Bedingungen falsch und deswegen wird die Benutzerdefinierte Aktion trotzdem ausgeführt.
Habt Ihr vielleicht eine Idee, wie die Condition richtig heißen muss?
Danke
caldi
Ich habe gerade auch nochmal probiert, die Commit und Install Methode mit einem return zu beenden ohne die Base Methode oder irgend einen anderen Code auszuführen.
Leider ebenfalls ohne Erfolg.
Es scheint als würde die Dienst Registrierung nicht hier statt finden.
Könnt Ihr mir weiterhelfen?
irgendwie scheint es gar nicht zu klappen.
Ich habe jeweils einzeln die Commit Methode und die Install Methode so überschrieben, dass die base Methode nur dann aufgerufen wird, wenn der Dienst nicht bereits installiert ist.
Ich habe es mit beiden Methoden gleichzeitig versucht.
Jedesmal habe ich die Major Versionnummer erhöht und den ProductCode verändert (UpdateCode ist gleich geblieben). Der Dienst war zum Zeitpunkt der Installation aus.
Trotzdem kam jedesmal die selbe Fehlermeldung, dass der Dienst bereits installiert sei.
Ich bin etwas ratlos, an was es noch liegen könnte?
Danke
caldi