نمایش نتایج 1 تا 11 از 11

نام تاپیک: UnInstall برنامه به صورت دستی

  1. #1

    UnInstall برنامه به صورت دستی

    سلام به همگی دوستان

    میخوام یک برنامه Uninstall درست کنم که یک برنامه نصب شده رو حذف کنم

    با کد زیر میتونم فایلهای یک مسیر رو پاک کنم:


    procedure TForm1.DelFilesFromDir(Directory, FileMask: string;
    DelSubDirs: Boolean);
    var
    SourceLst: string;
    FOS: TSHFileOpStruct;
    begin
    FillChar(FOS, SizeOf(FOS), 0);
    FOS.Wnd := Application.MainForm.Handle;
    FOS.wFunc := FO_DELETE;
    SourceLst := Directory + '\' + FileMask + #0;
    FOS.pFrom := PChar(SourceLst);
    if not DelSubDirs then
    FOS.fFlags := FOS.fFlags OR FOF_FILESONLY;
    // Remove the next line if you want a confirmation dialog box
    FOS.fFlags := FOS.fFlags OR FOF_NOCONFIRMATION;
    // Add the next line for a "silent operation" (no progress box)
    // FOS.fFlags := FOS.fFlags OR FOF_SILENT;
    SHFileOperation(FOS);
    end;


    حالا اینجا دو تا مشکل وجود داره

    یکی اینکه خود برنامه حذف هم توی همون پوشه قرار داره و موقع حذف نمیتونه خودش خودش رو حذف کنه و پیام خطا میده
    و دوم اینکه زیر پوشه های اون مسیر رو حذف نمیکنه

    چطوری میتونم این مشکل رو رفع کنم؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    ایران تهران
    پست
    608

    نقل قول: UnInstall برنامه به صورت دستی

    بهتره از برنامه های set up استفاده کنید که از کنترل پنل این کارو انجام میدن و به این مشکل نمیخورد ... من qsetup رو پیشنهاد میکنم ساده و کاراست

  3. #3

    نقل قول: UnInstall برنامه به صورت دستی

    بهتره از برنامه های set up استفاده کنید که از کنترل پنل این کارو انجام میدن و به این مشکل نمیخورد ... من qsetup رو پیشنهاد میکنم ساده و کاراست
    نه داداش
    خودم همه کارهای ستاپ رو انجام دادم
    و یک برنامه ستاپ ساز کامل ساختم

    برای Uninstall هم فقط همین جاش رو مشکل دارم
    بقیه قسمتها رو ردیف کردم

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    ایران تهران
    پست
    608

    نقل قول: UnInstall برنامه به صورت دستی

    خوب نیمشه برنامه ای بگه خودش پاک شه یا باید سرویس بنویسد یا اگه setup داره از خود کنترل پنل این کار پی بگیرید

  5. #5

    نقل قول: UnInstall برنامه به صورت دستی

    اینجا و اینجا رو ببینید ، تست نکردم !
    حذف پوشه

  6. #6

    نقل قول: UnInstall برنامه به صورت دستی

    خوب نیمشه برنامه ای بگه خودش پاک شه یا باید سرویس بنویسد یا اگه setup داره از خود کنترل پنل این کار پی بگیرید
    چرا میشه یک برنامه خودش خودش رو پاک کنه .

    توی کنترل پنل هم اصولا چیز خاصی ثبت نمیشه که بشه از اونجا برنامه رو حذف کرد
    چون فقط یک سری کلید توی رجیستری می نویسه که اطلاعاتش توی Programs میاد
    موقع Remove از کنترل پنل هم فقط یک فایل اجرایی رو صدا میزنه و اون فایل وظیفه پاک کردن فایلهای برنامه رو داره نه خود برنامه Program کنترل پنل

    اینجا
    و
    اینجا
    رو ببینید ، تست نکردم !
    حذف پوشه
    تنکس
    تست میکنم اگه جواب داد جوابش رو میگم.

  7. #7

    نقل قول: UnInstall برنامه به صورت دستی

    این کد رو گرفتم اما جواب نمیده :

    procedure xDeleteSelf;
    var
    module: HMODULE;
    buf: array[0..MAX_PATH - 1] of char;
    p: ULONG;
    hKrnl32: HMODULE;
    pExitProcess, pDeleteFile, pFreeLibrary: pointer;
    begin
    module := GetModuleHandle(nil);
    GetModuleFileName(module, buf, sizeof(buf));
    CloseHandle(THandle(4));
    p := ULONG(module) + 1;
    hKrnl32 := GetModuleHandle('kernel32');
    pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
    pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
    pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
    asm
    lea eax, buf
    push 0
    push 0
    push eax
    push pExitProcess
    push p
    push pDeleteFile
    push pFreeLibrary
    ret
    end;
    end;

    کد دیگه ای ندارید؟

  8. #8

    نقل قول: UnInstall برنامه به صورت دستی

    نقل قول نوشته شده توسط hadisalahi2 مشاهده تاپیک
    این کد رو گرفتم اما جواب نمیده :

    procedure xDeleteSelf;
    var
    module: HMODULE;
    buf: array[0..MAX_PATH - 1] of char;
    p: ULONG;
    hKrnl32: HMODULE;
    pExitProcess, pDeleteFile, pFreeLibrary: pointer;
    begin
    module := GetModuleHandle(nil);
    GetModuleFileName(module, buf, sizeof(buf));
    CloseHandle(THandle(4));
    p := ULONG(module) + 1;
    hKrnl32 := GetModuleHandle('kernel32');
    pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
    pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
    pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
    asm
    lea eax, buf
    push 0
    push 0
    push eax
    push pExitProcess
    push p
    push pDeleteFile
    push pFreeLibrary
    ret
    end;
    end;

    کد دیگه ای ندارید؟
    این کد فقط در ویندوز های 95,98 و ME کار میکنه !!
    پست زیرو بخون
    http://www.catch22.net/tuts/self-deleting-executables
    Everything that has a beginning has an end. ... The End?



  9. #9

    نقل قول: UnInstall برنامه به صورت دستی

    ممنون بابت پاسخت
    اما این لینک رو قبلا خودم خونده بودم
    واسه همین گفتم میخوام این کار توسط دلفی انجام بشه

  10. #10

    نقل قول: UnInstall برنامه به صورت دستی

    بهترین راه برای این کار اینه که یک فایل در Temp کپی و اجرا بشه و از طریق همون فایل عملیات حذف و پاکسازی رو انجام بدهید.
    البته کد زیر ر و هم تست کردم و بدون مشکل جواب داد.اما مشکل اینه که از دستورات Cmd استفاده شده.
    function ExtractBackDir(Path: string): string;
    begin
    Result := ExcludeTrailingPathDelimiter
    (Copy(Path, 1, LastDelimiter('\', ExtractFileDir(Application.ExeName))));
    end;

    procedure TForm1.Button6Click(Sender: TObject);
    var
    sl: TStringList;
    begin
    sl := TStringList.Create;
    try
    sl.Append(':Repeat');
    sl.Append('del "' + Application.ExeName + '"');
    sl.Append('if exist "' + ExtractFileName(Application.ExeName) +
    '" goto Repeat');
    sl.Append('rmdir /s /q "' + ExtractFileDir(Application.ExeName) + '"');
    sl.Append('del "' + ExtractBackDir(Application.ExeName) + '\Del.bat"');
    sl.SaveToFile(ExtractBackDir(Application.ExeName) + '\Del.bat');

    ShellExecute(Handle, 'open', pchar(ExtractBackDir(Application.ExeName) +
    '\Del.bat'), '', '', SHOW_OPENWINDOW);
    Application.Terminate;
    finally
    sl.Free;
    end;
    end;


  11. #11

    نقل قول: UnInstall برنامه به صورت دستی

    بهترین راه برای این کار اینه که یک فایل در Temp کپی و اجرا بشه و از طریق همون فایل عملیات حذف و پاکسازی رو انجام بدهید.
    واقعا جالبه که ذهن من و تو یک جور فکر میکنه
    هیمن روش به ذهن خودم هم رسید ولی گفتم شاید راه ساده تری باشه.

    البته کد زیر ر و هم تست کردم و بدون مشکل جواب داد
    منم تست کردم ردیف بود .

    اما مشکل اینه که از دستورات Cmd استفاده شده
    اینم مشکلی نیست که خیلی مهم باشه

    اما یک نکته اینه که ، کجا یک پیام بزارم که کاربر بفهمه کار حذف برنامه به پایان رسیده.

تاپیک های مشابه

  1. برنامه نویسی وی-پی-ان به صورت دستی
    نوشته شده توسط a1053r در بخش C#‎‎
    پاسخ: 4
    آخرین پست: دوشنبه 24 تیر 1392, 00:22 صبح
  2. سوال: نصب دلخواه به صورت دستی از چند برنامه
    نوشته شده توسط mr-secret در بخش تولید و توسعه برنامه های Setup و Install
    پاسخ: 0
    آخرین پست: چهارشنبه 10 اسفند 1390, 11:45 صبح
  3. ساختن برنامه ی نصب به صورت دستی
    نوشته شده توسط programerinfonet در بخش C#‎‎
    پاسخ: 5
    آخرین پست: چهارشنبه 28 دی 1390, 00:56 صبح
  4. سوال: نصب یا حذف(Uninstall) برنامه ها به صورت دسته جمعی در شبکه
    نوشته شده توسط kitcat_m18 در بخش شبکه و Networking‌
    پاسخ: 1
    آخرین پست: پنج شنبه 18 آذر 1389, 06:52 صبح
  5. پاسخ: 9
    آخرین پست: شنبه 30 دی 1385, 09:14 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •