اشتراکها
نظرات مطالب
BloggerToCHM
گوگل ویژگی جالبی داره به نام open search api که روی بلاگر فعال است. با استفاده از این قابلیت این کار میسر شد.
سایر سرویس دهندهها این قابلیت رو ندارند و نیاز به بررسی بیشتر هست.
سایر سرویس دهندهها این قابلیت رو ندارند و نیاز به بررسی بیشتر هست.
اشتراکها
مدیریت Timeline ویندوز
با استفاده از Windows SDK for windows 10 fall creators update میتوان به مدیریت تایم لاین ویندوز پرداخت
نظرات مطالب
BloggerToCHM
چندین نوع تایمر در دات نت داریم:
http://icolor2.blogspot.com/2005/12/understanding-c-timers.html
در ویندوز سرویس از تردتایمر استاندارد استفاد کنید. یک نکتهی ریز هم دارد: متغیر شیء مربوطه را باید در سطح کلاس تعریف کنید تا garbage collector آنرا معدوم نکند و تایمر از کار نیفتد.
http://icolor2.blogspot.com/2005/12/understanding-c-timers.html
در ویندوز سرویس از تردتایمر استاندارد استفاد کنید. یک نکتهی ریز هم دارد: متغیر شیء مربوطه را باید در سطح کلاس تعریف کنید تا garbage collector آنرا معدوم نکند و تایمر از کار نیفتد.
برنامه رایگان Adobe reader یک سری خط فرمان دارد که توسط آنها میتوان فایلهای PDF را مستقیما به چاپگر ارسال کرد. در ادامه قطعه کدی را ملاحظه خواهید کرد که انجام اینکار را کپسوله میکند:
توضیحات:
استفاده ابتدایی از کلاس فوق به نحو زیر است:
به این ترتیب فایل PDF ذکر شده به چاپگر پیش فرض سیستم ارسال میشود.
ملاحظات:
- کدهای فوق نیاز به ارجاعی به اسمبلی استاندارد System.Management.dll نیز دارند.
- اگر علاقمند بودید که چاپگر خاصی را معرفی کنید (برای مثال یک چاپگر تعریف شده در شبکه)، میتوانید خاصیت PrinterName را مقدار دهی نمائید.
- محل نصب Adobe reader از رجیستری ویندوز استخراج میشود. اما اگر محل نصب برنامه استاندارد نبود، نیاز است خاصیت AdobeReaderPath مقدار دهی گردد.
- تحت هر شرایطی برنامه Adobe reader ظاهر خواهد شد؛ حتی اگر در حین آغاز پروسه سعی در مخفی کردن پنجره آن نمائید. اینکار به عمد جهت مسایل امنیتی در این برنامه درنظر گرفته شده است تا کاربر بداند که پروسه چاپ آغاز شده است.
using System; using System.Diagnostics; using System.IO; using System.Management; using Microsoft.Win32; namespace PdfFilePrinter { /// <summary> /// Executes the Adobe Reader and prints a file while suppressing the Acrobat print /// dialog box, then terminating the Reader. /// </summary> public class AcroPrint { /// <summary> /// The Adobe Reader or Adobe Acrobat path such as 'C:\Program Files\Adobe\Adobe Reader X\AcroRd32.exe'. /// If it's not specified, the InstalledAdobeReaderPath property value will be used. /// </summary> public string AdobeReaderPath { set; get; } /// <summary> /// Returns the default printer name. /// </summary> public string DefaultPrinterName { get { var query = new ObjectQuery("SELECT * FROM Win32_Printer"); using (var searcher = new ManagementObjectSearcher(query)) { foreach (var mo in searcher.Get()) { if (((bool?)mo["Default"]) ?? false) return mo["Name"] as string; } } return string.Empty; } } /// <summary> /// The name and path of the PDF file to print. /// </summary> public string PdfFilePath { set; get; } /// <summary> /// Name of the printer such as '\\PrintServer\HP LaserJet'. /// If it's not specified, the DefaultPrinterName property value will be used. /// </summary> public string PrinterName { set; get; } /// <summary> /// Returns the HKEY_CLASSES_ROOT\Software\Adobe\Acrobat\Exe value. /// If AcroRd32.exe does not exist, returns string.Empty /// </summary> public string InstalledAdobeReaderPath { get { var acroRd32Exe = Registry.ClassesRoot.OpenSubKey(@"Software\Adobe\Acrobat\Exe", writable: false); if (acroRd32Exe == null) return string.Empty; var exePath = acroRd32Exe.GetValue(string.Empty) as string; if (string.IsNullOrEmpty(exePath)) return string.Empty; exePath = exePath.Trim(new[] { '"' }); return File.Exists(exePath) ? exePath : string.Empty; } } /// <summary> /// Executes the Adobe Reader and prints a file while suppressing the Acrobat print /// dialog box, then terminating the Reader. /// </summary> /// <param name="timeout">The amount of time, in milliseconds, to wait for the associated process to exit. The maximum is the largest possible value of a 32-bit integer, which represents infinity to the operating system.</param> public void PrintPdfFile(int timeout = Int32.MaxValue) { if (!File.Exists(PdfFilePath)) throw new ArgumentException(PdfFilePath + " does not exist."); var args = string.Format("/N /T \"{0}\" \"{1}\"", PdfFilePath, getPrinterName()); var process = startAdobeProcess(args); if (!process.WaitForExit(timeout)) process.Kill(); } private Process startAdobeProcess(string arguments = "") { var startInfo = new ProcessStartInfo { FileName = this.getExePath(), Arguments = arguments, CreateNoWindow = true, ErrorDialog = false, UseShellExecute = false, Verb = "print" }; return Process.Start(startInfo); } private string getPrinterName() { var printer = PrinterName; if (string.IsNullOrEmpty(printer)) printer = DefaultPrinterName; if (string.IsNullOrEmpty(printer)) throw new ArgumentException("Please set the PrinterName."); return printer; } private string getExePath() { var exePath = AdobeReaderPath; if (string.IsNullOrEmpty(exePath) || !File.Exists(exePath)) exePath = InstalledAdobeReaderPath; if (string.IsNullOrEmpty(exePath)) throw new ArgumentException("Please set the full path of the AcroRd32.exe or Acrobat.exe."); return exePath; } } }
توضیحات:
استفاده ابتدایی از کلاس فوق به نحو زیر است:
new AcroPrint { PdfFilePath = @"D:\path\test.pdf" }.PrintPdfFile();
ملاحظات:
- کدهای فوق نیاز به ارجاعی به اسمبلی استاندارد System.Management.dll نیز دارند.
- اگر علاقمند بودید که چاپگر خاصی را معرفی کنید (برای مثال یک چاپگر تعریف شده در شبکه)، میتوانید خاصیت PrinterName را مقدار دهی نمائید.
- محل نصب Adobe reader از رجیستری ویندوز استخراج میشود. اما اگر محل نصب برنامه استاندارد نبود، نیاز است خاصیت AdobeReaderPath مقدار دهی گردد.
- تحت هر شرایطی برنامه Adobe reader ظاهر خواهد شد؛ حتی اگر در حین آغاز پروسه سعی در مخفی کردن پنجره آن نمائید. اینکار به عمد جهت مسایل امنیتی در این برنامه درنظر گرفته شده است تا کاربر بداند که پروسه چاپ آغاز شده است.
در حین توسعه نرم افزاری برای ویندوز کامپکت مرتبا به خطاهایی که قبلا برنخورده بودم میرسیدم. چند باری هم کارهای انجام شده را بررسی کردم و در فورومهای مرتبط دنبال سرنخی از راه حل گشتم ولی یا جوابی مرتبط وجود نداشت و یا راه حلهای پیشنهادی دور از حل مسئله بود؛ تا اینکه یکی از خطاها نظرم را جلب کرد:
پس از بررسی کلی دستگاه و راهنمای آن متوجه شدم ویندوزی که برای دستگاه ساخته شده، به صورت پیش فرض دارای دات نت نصب شدهاست. من هم از دات نت نسخهی سه با سرویس پک یک و ویندوز کامپکت نسخهی 6 استفاده میکردم. در حین اجرا و دیباگ برنامه بر روی دستگاه، اگر نسخهای از دات نت نصب باشد، زحمت بهروز کردن دات نت را برای توزیع نمیدهد و برنامه به مشکل بر میخورد. راه حل این مشکل هم ساخت ویندوز جدید بدون دات نت فریمورک است که حدود یک ساعت و نیم زمان میبرد:
Could not load type 'System.Windows.Forms.Form' from assembly 'System.Windows.Forms, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC'. System.Windows.Forms 3.5.7283.0 but 3.5.0.0 windows CE
برای انجام این فرآیند احتیاج به نصب مقدماتی بر روی یک ویندوز تازه است که ترتیب نصب آن نیز بسیار مهم است:
1. Microsoft Visual Studio 2005 2. Microsoft Visual Studio 2005 Service Pack 1 3. Microsoft Windows Embedded CE 6.0 Toolkit 4. Windows Embedded CE 6.0 Platform Builder Service Pack 1 5. Windows Embedded CE 6.0 R2 6. Windows Embedded CE 6.0 R3
مرسی از سرعت جواب
مشکل در این است که این فایل را چگونه در ویندوز 7 بدون مشکل امنیتی نصب کنم
میدانید که کاربر را نمیتوان در گیر SafeMode و یا پیدا کردن شاخه های ویندوز نمود
در عین حال هم قبلا برخی از DLLهای موجود در اینترنت را استفاده کرده اما جوابگو نبوده است . امیدوارم این مورد به سرچ من پایان دهد
باز هم از جوابگویی متشکرم
مشکل در این است که این فایل را چگونه در ویندوز 7 بدون مشکل امنیتی نصب کنم
میدانید که کاربر را نمیتوان در گیر SafeMode و یا پیدا کردن شاخه های ویندوز نمود
در عین حال هم قبلا برخی از DLLهای موجود در اینترنت را استفاده کرده اما جوابگو نبوده است . امیدوارم این مورد به سرچ من پایان دهد
باز هم از جوابگویی متشکرم
در حالت کلی تفاوت خاصی وجود ندارد با سایر قسمتها و مسایل دیگر امنیتی ASP.NET. بیشتر، ورودیهای دریافتی توسط آنرا باید صحیح بکار بگیرید و مراقب آنها باشید.
- یک وظیفه در اینجا همیشه در حال اجرا نیست. فقط زمانیکه به تنظیمات خاصیت Schedule آن برسد، اجرا میشود. تمام وظایف پشت صحنه به همین صورت اجرا و مدیریت میشوند. یک حلقه مخصوص بررسی رسیدن به زمانبندی مدنظر وجود دارد و سپس اجرای آن وظیفهی خاص. نمونهی دیگر آن پروژهی « DNTScheduler.Core » است که معادل NET Core. مطلب «انجام کارهای زمانبندی شده در برنامههای ASP.NET توسط DNT Scheduler» هست.
- برای غیرفعال کردن یک Task در مطلب جاری، باید آنرا از لیست سرویسهای ثبت شدهی سیستم حذف کنید (و یا برای معرفی آن به سیستم باید به سیستم تزریق وابستگیها توسط services.AddHostedService اضافه شود).
public static class ServiceCollectionExtensions { public static IServiceCollection Remove<T>(this IServiceCollection services) { var serviceDescriptor = services.FirstOrDefault(descriptor => descriptor.ServiceType == typeof(T)); if (serviceDescriptor != null) services.Remove(serviceDescriptor); return services; } }