أين متجر التوقعات التي شنت ملفات PST؟ [مغلق]

StackOverflow https://stackoverflow.com/questions/855806

  •  21-08-2019
  •  | 
  •  

سؤال

وأود أن أضيف ملف PST برمجيا إلى ملف تعريف Outlook الشخص. لقد وجدت بعض الرموز هنا:

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

ورغم أن هذا لا حيلة، ما زال يترك السؤال - "أين توقعات إبقاء هذه القائمة من ملفات PST شنت؟" هل في التسجيل؟ ملف التكوين في مكان ما؟ أي شخص؟

هل كانت مفيدة؟

المحلول

وهذا هو تفصيل تطبيق الداخلي عرضة للتغيير من إصدار لآخر.

نصائح أخرى

وهذا الرمز (من مشروع الحالي) يبحث عن ويترجم أسماء ومسارات في كل يونيكود وغير يونيكود PST الملفات.

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);
            }
        }
    }
}

وإدخال التسجيل هو Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\<ProfileName>

و001f301 هو اسم يونيكود PST

وانها في التسجيل، بالمناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top