প্রোগ্রামার-পাভেল লিখেছেন:কারনঃ
১.ফাইল সাইজ কমানোর জন্য (প্যাকেট as Zip.Compress Na korle 20 MB Hoy)
ইনস্টলার প্রোগ্রাম এমনিতেই সমস্ত ফাইলগুলো কম্প্রেস করে। কাজেই এক্সিকিউটেবল কম্প্রেস করে আলাদা কোনো লাভ নেই। উল্টো সাইয বেড়ে যেতে পারে - কম্প্রেসড ফাইল রিকম্প্রেস করতে গেলে বরং ফাইনাল আউটপুটের সাইয বাড়া অসম্ভব না...
প্রোগ্রামার-পাভেল লিখেছেন:2.
" [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int GlobalAddAtom(string lpString);
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
internal static extern ushort GlobalDeleteAtom(int nAtom);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool RegisterHotKey(IntPtr hWnd, int keyId, HotKeyModifiers fsModifiers, Keys vk);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
"
ei code gular fole
program virus হিসেবে detect kore. You can try 3.0 versions program virus hisebe detect kore.
অর্থাৎ, আপনি ফুটন্ত কড়াই থেকে বাঁচতে জ্বলন্ত আগুনে ঝাঁপ দিচ্ছেন।
out of the frying pan and into the fire 
আপনার সফটওয়্যারটি অপরিচিত, তাই এখনো এ্যান্টিভাইরাসের রেডারে আসে নি। জেনে রাখুনঃ বাই ডিফল্ট যে কোনো প্যাকড এক্সিকিউটেবল দেখামাত্র ম্যালওয়্যার হিসাবে ফ্ল্যাগ করে বেশিরভাগ এ্যান্টিভাইরাস সফটওয়্যার।
এক সময় না এক সময় আপনার সফটওয়্যার ফ্ল্যাগড হবেই - সময়ের ব্যাপার মাত্র।
আপনার P/Invoke লিস্টে কোনো সাসপিশাস এপিআই দেখতে পেলাম না। তবে যেহেতু বাংলা টাইপিং সুবিধা আছে, ধরে নিচ্ছি আপনি SetWindowsHookEx() ব্যবহার করছেন - ইমপোর্ট লিস্টে এই ক্লাসের এপিআইগুলো পেলে বিভিন্ন এ্যান্টিভাইরাস সফটওয়্যার ম্যালওয়্যার বলে সন্দেহ করে (ফিশিং, পাসওয়ার্ড চুরি করা ট্রোযানগুলো এটা ব্যবহার করে)
তবে এটারও একটা সমাধান আছে। এপিআইগুলো সরাসরি স্ট্যাটিকালী লিংক না করে রানটাইমে ডাইনামিকালী লোড করুন। যেমনঃ
[DllImport("kernel32.dll")]
static extern bool SomeAPI(params..);
এভাবে স্ট্যাটিক লোডিং না করে, LoadLibrary() + GetProcAddress()-এর মাধ্যমে ডাইনামিকালী লোড করুন। সেমি-স্যুডোকোডঃ
*** আপডেটঃ ফোরামে সিন্ট্যাক্স হাইলাইট নেই। তাই গিটহাবে জিস্ট করে দিলাম কোড স্নিপেট-টা।
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string libname);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern bool FreeLibrary(IntPtr hModule);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
// Load the DLL file
IntPtr Handle = LoadLibrary(fileName);
// load & invoke the desired method from DLL
IntPtr funcaddr = GetProcAddress(Handle,functionName);
YourFunctionDelegate function = Marshal.GetDelegateForFunctionPointer(funcaddr,typeof(YourFunctionDelegate )) as YourFunctionDelegate ;
function.Invoke(...parameters here...);
// When done, free the DLL
if(Handle != IntPtr.Zero)
FreeLibrary(Handle);
এক্সট্রা সিকিউরিটির জন্য functionName এনকৃপ্ট করে রাখতে পারেন...
অবশ্য এটাও ১০০% ফুলপ্রুফ মেথড না। যেকোনো স্মার্ট এ্যান্টিভাইরাস GetProcAddress() ইত্যাদি এন্টৃপয়েন্ট-গুলো মনিটর করবে।
আল্টিমেট সমাধান হলো সব এ্যান্টিভাইরাস ভেন্ডরের সাথে যোগাযোগ করে আপনার সফটওয়্যারটি হোয়াইটলিস্ট করা। তবে তার জন্য সফটওয়্যারটি আবার verisign বা অন্য কোনো সিএ ভেণ্ডর দ্বারা কোডসাইনড/সার্টিফাইড করাতে হবে ($$$) 
Calm... like a bomb.