Frage

Ich mag programmatisch eine PST-Datei in eine Outlook-Profil einer Person hinzufügen. Ich fand einige Code hier:

http://www.eggheadcafe.com /community/aspnet/65/10030171/try-this-code.aspx

Während das funktioniert der Trick, lässt er noch die Frage - „Wo Ausblick diese Liste nicht halten berittener PST-Dateien?“ Ist es in der Registrierung? Eine Config irgendwo Datei? Anybody?

War es hilfreich?

Lösung

Das ist ein internes Implementierung Detail Thema von Version zu Version geändert werden.

Andere Tipps

Dieser Code (aus einem aktuellen Projekt) sucht und dekodiert die Namen und Pfade der beiden Unicode & Non-Unicode-PST-Dateien.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;
using Microsoft.Win32;

namespace PSTRemoval_v2
{
    class PSTRReg
    {
        public RegistryKey regOPs, regPR, regCU, regCP, regCC;

        public Dictionary<string, string> OpenPSTs = new Dictionary<string, string>();

        public Dictionary<string, string> ClosedPSTs = new Dictionary<string, string>();

        public Dictionary<string, string> PurgedPSTs = new Dictionary<string, string>();

        public void ValidRegEntries(Outlook.Application olApp)
        {
            string prf = olApp.Session.CurrentProfileName;  // retrieve current Outlook profile name.  Needed in case user has multiple profiles

            regCU = Registry.CurrentUser;

            regOPs = regCU.CreateSubKey(String.Format(@"Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\{0}",prf));

            regPR = regCU.CreateSubKey(String.Format(@"Software\WRT\OutlookAddins\PSTRemoval\{0}", prf));  // create a subkey in the registry for this profile

            regCC = regPR.CreateSubKey(@"ClosedPSTs");
            regCP = regPR.CreateSubKey(@"PurgedPSTs");
        }

        public void OpenPSTs_REG_Read()
        {
            PSTRNet regnet = new PSTRNet();
            regnet.EnumerateNetworkDrives();

            string[] sk = regOPs.GetSubKeyNames();
            foreach (string subkey in sk)
            {
                RegistryKey rk2 = regOPs.OpenSubKey(subkey);
                if (rk2.ValueCount > 0)
                {
                    string[] vn = rk2.GetValueNames();
                    Array.Sort(vn);

                    int bs = Array.BinarySearch(vn, "001f3001"); // search for the PST Name
                    int bs1 = Array.BinarySearch(vn, "001f3006"); // PST Name alternative
                    if ((bs > -1) || (bs1 > -1))
                    {
                        int bs2 = Array.BinarySearch(vn, "001f6700");  // search for the PST Path
                        if (bs2 > -1)
                        {
                            // decode the Name & Path to text strings
                            string PSTName;
                            try { PSTName = decode(vn[bs], rk2); }
                            catch { PSTName = decode(vn[bs1], rk2); }
                            string PSTPath = decode(vn[bs2], rk2);

                            if (regnet.PSTOnNet(PSTPath))  // add the PST to the list if it is on a network drive
                            {
                                try
                                {
                                    OpenPSTs.Add(PSTPath, PSTName);
                                }
                                catch { }
                                regOPs.DeleteSubKey(subkey);  // then delete the entry from the main part of the registry
                            }
                        }
                    }
                }
            }
        }

        public void PSTs_REG_Read(RegistryKey regkey, Dictionary<string, string> entries)
        {
            string[] RK = regkey.GetValueNames();
            if (RK.Length > 0)
                foreach (string ValueName in RK)
                    try { entries.Add(ValueName, regkey.GetValue(ValueName).ToString()); }
                    catch { }
        }

        public void PSTs_Reg_write(RegistryKey regKey, Dictionary<string, string> entries)
        {
            string[] RK_Delete = regKey.GetValueNames();
            if (RK_Delete.Length > 0)
                foreach (string ValueName in RK_Delete)
                    regKey.DeleteValue(ValueName);

            foreach (KeyValuePair<string, string> kvp in entries)
                regKey.SetValue(kvp.Key, kvp.Value);
        }

        private string decode(string value, RegistryKey rk)  // decode registry entries from Unicode to plain text
        {
            byte[] b = (byte[])rk.GetValue(value);


         return Encoding.Unicode.GetString(b);
            }
        }
    }
}

Der Registrierungseintrag ist Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\<ProfileName>

001f301 ist der Name des Unicode-PST

Es ist in der Registrierung, nebenbei gesagt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top