لیست منسوخ شدهها در SQL Server 2012
منابع مختلفی در اینترنت موجود هست برای دریافت دیتای مرتبط به تقسیمات کشوری ولی خیلی از موارد یا تقسیم بندی کاملی ندارند یا قدیمی هستند یا فرمت مناسبی ندارند.
برای یکی از نرم افزارها نیاز بود لیست به روز (سال 96-97) شهرهای ایران رو به تفکیک استان/شهرستان/شهر به همراه مختصات آنها برای نمایش روی نقشه به صورت اطلاعات پایه در نرم افزار داشته باشیم... این شد که این فایل رو با توجه به دیتای سایت آمار کشور و چند سایت دیگر جمع آوری کردیم.
در نهایت این لیست رو به فرمت json به اشتراک گذاشتم تا دوستان هم اگر نیازی داشتند استفاده کنند.
از زمانیکه دات نت فریم ورک ارائه شده (حدودا 8 سال یا بیشتر اگر بتای آنرا هم به حساب بیاوریم به سال 2000 بر میگردد)، نگارشهای متفاوتی تا به امروز در اختیار عموم قرار گرفته اند.
جدول زیر این موارد را تا این تاریخ لیست کرده و شماره نگارش دقیق آنها را نیز بر میشمارد:
.NET version | Actual version |
3.5 SP1 | 3.5.30729.1 |
3.5 | 3.5.21022.8 |
3.0 SP2 | 3.0.4506.2152 |
3.0 SP1 | 3.0.4506.648 |
3.0 | 3.0.4506.30 |
2.0 SP2 | 2.0.50727.3053 |
2.0 SP1 | 2.0.50727.1433 |
2.0 | 2.0.50727.42 |
1.1 SP1 | 1.1.4322.2032 |
1.1 SP1 (in 32 bit version of Windows 2003) | 1.1.4322.2300 |
1.1 | 1.1.4322.573 |
1.0 SP3 | 1.0.3705.6018 |
1.0 SP2 | 1.0.3705.288 |
1.0 SP1 | 1.0.3705.209 |
1.0 | 1.0.3705.0 |
برای بدست آوردن شماره نگارشهای نصب شده بر روی یک کامپیوتر متاسفانه راه سادهای وجود ندارد. امکاناتی هم که خود دات نت فریم ورک به صورت ذاتی ارائه میدهد به صورت زیر است:
class NetVersion
{
public static string Version
{
get
{
return Environment.Version + "\n" +
Environment.OSVersion;
}
}
}
که خروجی آن فقط آخرین نگارش CLR را شامل میشود.
برای مثال روی ویندوز اکس پی سرویس پک 3 با دات نت فریم ورک سه و نیم، سرویس پک یک خواهیم داشت:
2.0.50727.3053
Microsoft Windows NT 5.1.2600 Service Pack 3
خوبی این روش هم این است که اگر در یک هاست اینترنتی قصد داشتید شماره نگارش دات نت فریم ورک سرور را بررسی کنید، بدون مشکل پاسخ خواهد داد. برای مثال اگر به دات نت فریم ورک 2 سرویس پک 2 رسیدید، یعنی دات نت فریم ورک سه و نیم، سرویس پک یک حتما روی سرور نصب است، چون این دو با هم ارائه شدهاند و به صورت مجزا ارائه نشدهاند.
برای بدست آوردن لیست دات نت فریم ورکهای مختلف باید به رجیستری ویندوز مراجعه کرد. مسیرهای:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform
این روش یا حتی لیست کردن فولدرهای نصب شد در مسیر C:\WINDOWS\Microsoft.NET\Framework نیز شماره نگارش کامل را ارائه نمیدهند. تنها راه باقیمانده مراجعه به فایل mscorlib.dll هر پوشه و بررسی نگارش آن است:
اینکار را با برنامه نویسی به صورت زیر میتوان انجام داد:
public static string MscorlibVersion
{
get
{
//using System.Diagnostics;
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(
Environment.GetEnvironmentVariable("windir") +
@"\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll");
return myFileVersionInfo.ProductVersion;
}
}
الف) Samples\PdfReportSamples\ZapfDingbatsSymbols
تعاریف قلم توکاری به نام Adobe Zapf Dingbats در iTextSharp وجود دارد که جهت نمایش انواع و اقسام علایم در فایلهای PDF میتواند بکارگرفته شود. این قلم توکار توسط قالبی به نام Symbol در PdfReport قابل استفاده است:
column.ColumnItemsTemplate(template => { template.Symbol(data => { if (Enum.IsDefined(typeof(AdobeZapfDingbats), data)) { return (AdobeZapfDingbats)data; } return AdobeZapfDingbats.BallotX; }); });
دریافت فایل PDF خروجی حاصل:
ZapfDingbatsSymbols.pdf
ب) Samples\PdfReportSamples\PersianFontsListToPdf
در این مثال لیست تمام فونتهای شروع شده با b که در سیستم نصب شدهاند، تهیه میشود. برای اینکار یک قالب سفارشی سلول به نام FontsListCellTemplate تهیه شده است. ساختار آن هم بسیار ساده است. بر اساس اطلاعات ردیف جاری، متن و نام قلم مورد نظر را دریافت کرده و اطلاعات نهایی را نمایش میدهد.
دریافت فایل PDF خروجی حاصل:
FontsListToPdfSample.pdf
اگر به برنامههای جدید نوشته شده برای ویندوز 7 دقت کنیم، از یک سری امکانات مخصوص آن جهت بهبود دسترسی پذیری به قابلیتهایی که ارائه میدهند، استفاده شده است. برای مثال برنامهی OneNote مجموعهی آفیس را در نظر بگیرید. اگر بر روی آیکون آن در نوار وظیفهی ویندوز کلیک راست کنیم، لیست آخرین فایلهای گشوده شده توسط آن مشخص است و با کلیک بر روی هر کدام، به سادگی میتوان این فایل را گشود. یک چنین قابلیتی در منوی آغازین ویندوز نیز تعبیه شده است (شکلهای زیر):
خبر خوب اینکه برای اضافه کردن این قابلیت به برنامههای WPF4 نیازی به کد نویسی نیست و این موارد که تحت عنوان استفاده از Jump list ویندوز 7 تعریف شدهاند، با کمی دستکاری فایل App.Xaml برنامه، فعال میگردند:
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
<JumpList.JumpList>
<JumpList ShowRecentCategory="True" />
</JumpList.JumpList>
</Application>
سؤال: من اینکار را انجام دادم ولی کار نمیکنه!؟
پاسخ: بله. کار نمیکنه! این قابلیت تنها زمانی فعال خواهد شد که علاوه بر نکتهی فوق، پسوند فایل یا فایلهایی نیز به برنامهی شما منتسب شده باشد. این انتسابها مطلب جدیدی نیست و در تمام برنامههای ویندوزی باید توسط بکارگیری API ویندوز مدیریت شود. قطعه کد زیر اینکار را انجام خواهد داد:
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Common.Files
{
//from : http://www.devx.com/vb2themax/Tip/19554?type=kbArticle&trk=MSCP
public class FileAssociation
{
const int ShcneAssocchanged = 0x8000000;
const int ShcnfIdlist = 0;
public static void CreateFileAssociation(
string extension,
string className,
string description,
string exeProgram)
{
// ensure that there is a leading dot
if (extension.Substring(0, 1) != ".")
extension = string.Format(".{0}", extension);
try
{
if (IsAssociated(extension)) return;
// create a value for this key that contains the classname
using (var key1 = Registry.ClassesRoot.CreateSubKey(extension))
{
if (key1 != null)
{
key1.SetValue("", className);
// create a new key for the Class name
using (var key2 = Registry.ClassesRoot.CreateSubKey(className))
{
if (key2 != null)
{
key2.SetValue("", description);
// associate the program to open the files with this extension
using (var key3 = Registry.ClassesRoot.CreateSubKey(string.Format(@"{0}\Shell\Open\Command", className)))
{
if (key3 != null) key3.SetValue("", string.Format(@"{0} ""%1""", exeProgram));
}
}
}
}
}
// notify Windows that file associations have changed
SHChangeNotify(ShcneAssocchanged, ShcnfIdlist, 0, 0);
}
catch (Exception ex)
{
//todo: log ...
}
}
// Return true if extension already associated in registry
public static bool IsAssociated(string extension)
{
return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
}
[DllImport("shell32.dll")]
public static extern void SHChangeNotify(int wEventId, int uFlags, int dwItem1, int dwItem2);
}
}
private static void createFileAssociation()
{
var appPath = Assembly.GetExecutingAssembly().Location;
FileAssociation.CreateFileAssociation(".xyz", "xyz", "xyz File",
appPath
);
}
سؤال: من این کارها را هم انجام دادم. الان به چه صورت از آن استفاده کنم؟
زمانیکه کاربری بر روی یکی از این فایلهای ذکر شده در لیست آخرین فایلهای گشوده شده توسط برنامه کلیک کند، آدرس این فایل به صورت یک آرگومان به برنامه ارسال خواهد شد. برای مدیریت آن در WPF باید به فایل App.Xaml.cs مراجعه کرده و چند سطر زیر را به آن افزود:
public partial class App
{
public App()
{
this.Startup += appStartup;
}
void appStartup(object sender, StartupEventArgs e)
{
if (e.Args.Any())
{
this.Properties["StartupFileName"] = e.Args[0];
}
}
//...
در این کد، e.Args حاوی مسیر فایل انتخابی است. برای مثال در اینجا مقدار آن به خاصیت StartupFileName انتساب داده شده است. این خاصیت در برنامههای WPF به صورت یک خاصیت عمومی تعریف شده است و در سراسر برنامه (مثلا در رخداد آغاز فرم اصلی آن یا هر جای دیگری) به صورت زیر قابل دسترسی است:
var startupFileName = Application.Current.Properties["StartupFileName"];
سؤال: برنامهی من از OpenFileDialog برای گشودن فایلها استفاده نمیکند. آیا راه دیگری برای افزودن مسیرهای باز شده به Jump lists ویندوز 7 وجود دارد؟
پاسخ: بله. همانطور که میدانید عناصر XAML با اشیاء دات نت تناظر یک به یک دارند. به این معنا که JumpList تعریف شده در ابتدای این مطلب در فایل App.XAML ، دقیقا معادل کلاسی به همین نام در دات نت فریم ورک است (تعریف شده در فضای نام System.Windows.Shell) و با کد نویسی نیز قابل دسترسی و مدیریت است. برای مثال:
var jumpList = JumpList.GetJumpList(App.Current);
var jumpPath = new JumpPath();
jumpPath.Path = "some path goes here....";
// If the CustomCategory property is null
// or Empty, the item is added to the Tasks category
jumpPath.CustomCategory = "Files";
JumpList.AddToRecentCategory(jumpPath);
jumpList.Apply();
<Application x:Class="Win7Wpf4.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
<JumpList.JumpList>
<JumpList ShowRecentCategory="True">
<JumpPath
CustomCategory="Files"
Path="Some path goes here..."
/>
</JumpList>
</JumpList.JumpList>
</Application>
بستهی نصب SQL Server CE 3.5 SP2 وجود دارد:
اما برای برنامههای جدیدتر نیاز به افزودن بستهی نصب دیتابیس SQL Server CE نسخه 4 است که با عدم وجود این بسته روبرو هستیم. در ادامه با نحوهی افزودن این بستهها آشنا خواهید شد.
اینگونه بستهها در کنار برنامهی ساخت نصاب و در پوشهی SetupPrerequisites نگهداری شده و با نوع *.prq ذخیره میشوند. این نوع فایلها از نوع xml هستند و در واقع یک نوع کار نگاشت را انجام میدهند. برای نمونه محتویات یکی از این فایلها را در زیر میبینید:
<?xml version="1.0" encoding="UTF-8"?> <SetupPrereq> <conditions> <condition Type="32" Comparison="2" Path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.5\ENU" FileName="DesktopRuntimeVersion" ReturnValue="3.5.8080.0"></condition> </conditions> <operatingsystemconditions> <operatingsystemcondition MajorVersion="5" MinorVersion="0" PlatformId="2" CSDVersion="" ServicePackMajorMin="3"></operatingsystemcondition> <operatingsystemcondition MajorVersion="5" MinorVersion="1" PlatformId="2" CSDVersion="" Bits="1" ProductType="1"></operatingsystemcondition> <operatingsystemcondition MajorVersion="6" MinorVersion="0" PlatformId="2" CSDVersion="" Bits="1"></operatingsystemcondition> <operatingsystemcondition MajorVersion="5" MinorVersion="2" PlatformId="2" CSDVersion="" Bits="1" ProductType="2|3"></operatingsystemcondition> <operatingsystemcondition MajorVersion="6" MinorVersion="1" PlatformId="2" CSDVersion="" Bits="1"></operatingsystemcondition> <operatingsystemcondition MajorVersion="6" MinorVersion="0" PlatformId="2" CSDVersion="" Bits="1" ProductType="2|3"></operatingsystemcondition> </operatingsystemconditions> <files> <file LocalFile="<ISProductFolder>\SetupPrerequisites\SQL CE 3.5\SSCERuntime_x86-ENU.msi" URL="http://go.microsoft.com/fwlink/?LinkId=166085&clcid=0x409" CheckSum="86AF6D36DFF214718DCD35D851249D3D" FileSize="0,3164160"></file> </files> <execute file="SSCERuntime_x86-ENU.msi" cmdline="/q /norestart" cmdlinesilent="/q /norestart" returncodetoreboot="1641,3010,4123" requiresmsiengine="1"></execute> <properties Id="{A7C4B3C0-F3A0-426A-A043-E13DBA123E52}" Description="This prerequisite installs the Microsoft SQL Server Compact 3.5 SP2." AltPrqURL="http://saturn.installshield.com/is/prerequisites/microsoft sql ce 3.5 sp2.prq"></properties> <behavior Reboot="2"></behavior> </SetupPrereq>
برای نسخه 32 بیتی(Microsoft SQL CE 4.0 x86.prq ):
<?xml version="1.0" encoding="UTF-8"?> <SetupPrereq> <conditions> <condition Type="32" Comparison="2" Path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v4.0\ENU" FileName="DesktopRuntimeVersion" ReturnValue="4.0.8482.1"></condition> </conditions> <operatingsystemconditions> <operatingsystemcondition CSDVersion="" Bits="1"></operatingsystemcondition> </operatingsystemconditions> <files> <file LocalFile=".\SSCERuntime_x86-ENU.exe" URL="http://download.microsoft.com/download/0/5/D/05DCCDB5-57E0-4314-A016-874F228A8FAD/SSCERuntime_x86-ENU.exe" CheckSum="0A55733CF406FBD05DFCFF5A27A0B4F7" FileSize="0,2379544"></file> </files> <execute file="SSCERuntime_x86-ENU.exe"></execute> <properties Id="{2754916B-119B-4428-9F94-DC9E45072CCC}"></properties> <behavior Failure="4" Reboot="2"></behavior> </SetupPrereq>
<?xml version="1.0" encoding="UTF-8"?> <SetupPrereq> <conditions> <condition Type="32" Comparison="2" Path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v4.0\ENU" FileName="DesktopRuntimeVersion" ReturnValue="4.0.8482.1"></condition> </conditions> <operatingsystemconditions> <operatingsystemcondition CSDVersion="" Bits="2"></operatingsystemcondition> </operatingsystemconditions> <files> <file LocalFile=".\SSCERuntime_x64-ENU.exe" URL="http://download.microsoft.com/download/0/5/D/05DCCDB5-57E0-4314-A016-874F228A8FAD/SSCERuntime_x64-ENU.exe" CheckSum="A417082ECAEDD95AFB41F73DC140C350" FileSize="0,2621240"></file> </files> <execute file="SSCERuntime_x64-ENU.exe"></execute> <properties Id="{7CB7BE3C-614A-403F-94D9-5652285A3EDF}"></properties> <behavior Failure="4" Reboot="2"></behavior> </SetupPrereq>