أين متجر التوقعات التي شنت ملفات PST؟ [مغلق]
سؤال
وأود أن أضيف ملف 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
وانها في التسجيل، بالمناسبة.
لا تنتمي إلى StackOverflow