Fa نصب اتوماتیک Flashplayer در صورت نصب نبودن در سیستم؟

perna

Member
سلام

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

وقتی این فایل exe رو کسی اجرا می کنه و Flashplayer روی سیستمش نصب نیسیت خود به خود از طریق


فایل setup ، این برنامه نصب بشه....


خواهش میکنم جواب منو در همین تاپیک توضیح بدین ( یعنی نگید برو تو فروم بگرد پیدا می کنی )


:rose:
 

Member
هر ورژن فلش یه فایل توی ویندوز میذاره
کافیه یه اسکریپت بذاری که وجود اون فایل رو چک کنه
البته پروژه های من در صورت نبود فلش پلیر صفحه نصب فلش رو میارن و کاربر رو مجبور به نصب می کنن:green:
 

asirap

Member
یه سوال اگه هر دفعه دور از چشم کابر نصب بشه ایرادش چی هست؟

:wink:
هیچ ایرادی نداره

توی مجموعه MRT یک دکمه هست که انگار یه سری DLL رو کپی میکنه! و فلش پلیر نصب میشه!

خوب باید کلید فلش پلیر رو توی رجیستری سرچ کنه با استفاده از پلاگین و اگه False بود بیاد و نصب کنه...

یکی از دوستان هم گفته بود (فک کنم همین بهشت عزیز خودمون) که میشه ورژن فلش پلیر رو هم با جایگزینی فایل توی پوشه Player عوض کرد تا ورژن جدیدتری Embbed بشه....
 

winsent

Banned
شما میخواید کاری مثل مجموعه "کینگ 2009 و 2010" بکنید که اگر فلش پلیر روی سیستم نصب نبود به صورت توماتیک نصب بشه.
این پلاگین رو من داشتم، سعی میکنم پیدا کنم و در همین تاپیک براتون بذارم.
موفق باشید...
 

evil_gates

اين نيز بگذرد ...
دوست عزيز
يه راه حل ساده كه ميتونم بهتون پيشنهاد كنم اينه كه شما آخرين نسخه فلش پلير رو كنار برنامه قرار بديد و در زمان اولين اجراي برنامه اون رو نصب كنيد. و بعد از نصب هم يك متغير با SaveVariable به رجيستري اضافه كنيد. مثلا x=1

در دفعات بعدي اجرا LoadVariable رو تو page start برنامه قرار بديد و متغير رجيستريتون رو با يك شرط چك كنيد. كه در صورتي كه نتيجه مثبت بود يعني x=1 بود در اين صورت ديگه فلش پلير رو نصب نكنه و اگه نتيجه غير از اين بود فلش پلير رو نصب كنه. (كه خب چون يكبار شما نصب كرديد دفعات بعدي هميشه شرط شما نقض ميشه و فلش پلير نصب نخواهد شد.)

موفق باشيد
 

flat_00

Member
دوست عزيز
يه راه حل ساده كه ميتونم بهتون پيشنهاد كنم اينه كه شما آخرين نسخه فلش پلير رو كنار برنامه قرار بديد و در زمان اولين اجراي برنامه اون رو نصب كنيد. و بعد از نصب هم يك متغير با savevariable به رجيستري اضافه كنيد. مثلا x=1

در دفعات بعدي اجرا loadvariable رو تو page start برنامه قرار بديد و متغير رجيستريتون رو با يك شرط چك كنيد. كه در صورتي كه نتيجه مثبت بود يعني x=1 بود در اين صورت ديگه فلش پلير رو نصب نكنه و اگه نتيجه غير از اين بود فلش پلير رو نصب كنه. (كه خب چون يكبار شما نصب كرديد دفعات بعدي هميشه شرط شما نقض ميشه و فلش پلير نصب نخواهد شد.)

موفق باشيد

سلام
ممکنه یک نمونه آماده قرار بدید؟
 

evil_gates

اين نيز بگذرد ...
از اين كد تو page start استفاده كنيد.
کد:
LoadVariable("myvar","x")
If (x=1) Then
  Run("x:\myprogram.exe","")
Else
  Run("x:\flashplayer.exe","")
  x=1
  SaveVariable("myvar","x")
  Run("x:\myprogram.exe","")
End
 

mehdi2477

Member
سلام

دوست عزیز شما با چک کردن رجیستری ویندوز کاربر میتونید در صورت عدم وجود نسخه خاصی از برنامه مورد نظرتون پیغام عدم نصب را به کاربر نشون بدین و پشت بند اون هم آدرس فایل نصب را .



کدهای زیر در مورد چک کردن برنامه Adobe Acrobat میباشد. وکارشم اینه که میاد رجیستری سیستم را چک میکنه و در صورت نبود شاخه مورد نظر به کاربر پیغام عدم نصب میده.

یک نکته : برنامه به زبان lua هست ولی اونایی که بکم برنامه نویسی بلد باشن میتونند راحت شبیه سازی کنند و توی mmb استفاده کنند
امیدوارم مثمر ثمر واقع شود .

HTML:
function ir_GetAcrobatVersion()
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   LOCAL VARIABLE DECLARATION - CHANGE THESE FOR EACH PROGRAM   %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    local AcrobatFullVer = "0.0.0.0";
    local bOK = true;    
    local strVersion = "0.0.0.0";

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   CHECK FOR ACROBAT READER ENTRY IN SYSTEM REGISTRY            %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    local strCLSIDKey = "CLSID\\{B801CA65-A1FC-11D0-85AD-444553540000}\\LocalServer32";

    bOK = Registry.DoesKeyExist(HKEY_CLASSES_ROOT,strCLSIDKey);
    if(not bOK)then
        strCLSIDKey = "CLSID\\{B801CA65-A1FC-11D0-85AD-444553540000}\\LocalServer";
        bOK = Registry.DoesKeyExist(HKEY_CLASSES_ROOT,strCLSIDKey);
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   IF ACROBAT READER EXISTS IN THE REGISTRY, GET THE FILENAME   %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (bOK) then
        strFileName = Registry.GetValue(HKEY_CLASSES_ROOT,strCLSIDKey,"NoName",true);
        strFileName = String.TrimRight(strFileName,"\"");
        strFileName = String.TrimLeft(strFileName,"\"");
        if (Application.GetLastError() ~= 0) then    
            bOK = false;
        end
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   IF THE FILENAME WAS RETRIEVED SUCCESSFULLY, GET VERSION #    %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (bOK) then
        -- Detect the version of the file here...
        verInfo = File.GetVersionInfo(strFileName);
        if(Application.GetLastError() ~= 0)then
            strVersion = "0.0.0.0";
        else
            -- OK, we have the file version
            strVersion = verInfo.FileVersion;
        end
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   IF THERE WERE ANY PROBLEMS, SET VERSION # TO 0.0.0.0         %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (bOK ~= true) then
        strVersion = "0.0.0.0";
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   CHECK FOR FULL VERSION OF ACROBAT.  USE FULL VERSION ONLY IF %%
--%%   IF NO VERSION FOUND.                                         %%
--%%   *NOTE: THIS IS ACCOMPLISHED BY TESTING THE *.PDF DEFAULT     %%
--%%   VIEWER.   IF THE VIEWER IS SET TO THE READER OR ANY OTHER    %%
--%%   PROGRAM, 0.0.0.0 WILL BE RETURNED                            %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (String.CompareFileVersions(strVersion, "0.0.0.0") == 0) then
        -- Try to detect the full version from file association.
        AcrobatFullVer = CheckAcrobatFull();
        if AcrobatFullVer ~= "0.0.0.0" then
            strVersion = AcrobatFullVer;
        end
    end

    return strVersion;
end











function CheckAcrobatFull()
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   LOCAL VARIABLE DECLARATION - CHANGE THESE FOR EACH PROGRAM   %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    local tValidFileNames = {"acrobat"};
    local strDefaultExtension = "pdf";

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   LOCAL VARIABLE DECLARATION                                   %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    local bOK = true;
    local bIsValidViewer = false;
    local strDefaultViewer = "";
    local strVersion = "";
    local j = 0;
    local name = 0;
    local tFileInfo = {};
    local tSplit_Path = {};

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   SET DEFAULT VIEWER VERSION TO 0.0.0.0                        %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    strVersion ="0.0.0.0";

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   GET THE DEFAULT VIEWER FOR THE SPECIFIED EXTENSION           %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    strDefaultViewer = File.GetDefaultViewer(strDefaultExtension);
    strDefaultViewer = String.TrimRight(strDefaultViewer,"\"");
    strDefaultViewer = String.TrimLeft(strDefaultViewer,"\"");

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   IF THERE IS NO DEFAULT VIEWER, SET VERSION TO 0.0.0.0        %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if (Application.GetLastError() ~= 0) then
        strVersion = "0.0.0.0";
        bOK = false;
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   IF THERE IS A DEFAULT VIEWER, GET THE FILENAME AND COMPARE   %%
--%%   THE FILENAME TO THE TABLE OF VALID NAMES ABOVE.  IF THE      %%
--%%   NAME IS VALID, GET THE VERSION NUMBER                        %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if bOK then
        --assume viewer is not valid filename
        bIsValidViewer = false;
    
        tSplit_Path = String.SplitPath(strDefaultViewer);
            
        --check default viewer against valid filenames
        for j, name in tValidFileNames do
            --compares a caseless strDefaultViewerFile to a list of valid names
            if String.CompareNoCase(tSplit_Path.Filename, name)==0 then
                bIsValidViewer = true;
            end
        end
    
        --if default reader is valid filename
        if bIsValidViewer then
            --get version info (if file does not exist, version string will be empty)
            tFileInfo = File.GetVersionInfo(strDefaultViewer);

            --default viewer does exist, store version number
            strVersion = tFileInfo.FileVersion;          
        end
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   IF THE DEFAULT FILENAME IS INVALID, ASSIGN VERSION 0.0.0.0   %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if not bIsValidViewer then
        strVersion = "0.0.0.0";
    end

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--%%                                                                %%
--%%   RETURN THE VERSION NUMBER OF THE DEFAULT VIEWER.             %%
--%%   IF THERE IS NO VIEWER, OR THE VIEWER FILENAME DOES NOT MATCH %%
--%%   ONE OF THE ABOVE LISTED FILENAMES, 0.0.0.0 WILL BE RETURNED  %%
--%%                                                                %%
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    return strVersion;

end
 
آخرین ویرایش:

moalla

Member
يه تذكر كوچولو كه 90 درصد ميدونيد اما باز بگم:
اگه فايل فلشتون توي خود فايل Mmb‌قرار اجرا بشه نياز به نصف فلش پلير نيست و هنگام ساختن فايل exe راحت تعريف ميشه كه يه فلش پلير همزمان اجرا بشه. البته اين گزينه چيزي رو نصب نميكنه ولي باعث ميشه توي برنامه فايلهاي فلش اجرا بشه.

حالا اين رو كه فكر كنم خودتون ميدونستيد و فقط گفتم شايد كسي بياد توي تاپيك و اين قسمت رو ندونه
اما اگه ميخوايد جدا از برنامه يه فلش پلير نصب بشه:
براي اين كار عموما از برنامه هاي مونيتور نصب استفاده ميشه. برنامه هايي هستن كه قبل از نصب برنامه اجرا ميشن و كل مراحل نصب رو تحت نظر ميگيرن و در آخر بهتون ميگن كه برنامه اي كه نصب شد مثلا فرلان مقدار رو در رجيستري نوشت و فلان ocx‌رو در پوشه system32 ‌كپي كرد. برنامه اي زيادي براي اين كار هست. چند وقت پيش برنامه advanced uninstaller رو ديدم كه تا اونجايي كه يادمه همين امكان رو داشت. خوب با اين اوصاف روند كار واضح ميشه. ابتدا يكي از اين برنامه ها رو اجرا ميكنيد. ميبينيد چه تغييراتي ايجاد شد و بعد هنگام اجراي برنامه خودتون اون تغيير رو چك ميكنيد.

فلش پلير 10 يه ocx‌توي مسير زير ايجاد ميكنه:
D:\WINXPSP3\system32\Macromed\Flash
اسم فايلش هم اينه:
Flash10b.ocx

البته شما نميتونيد با كپي اين فايل فلش پلير رو نصب كنيد و هر ocx‌بعد از كپي شدن نياز به رجيستر شدن از طريق run دارن
كه يا بايد تمام اين كارها رو از طريق فايلتون انجام بديد و يا فقط بودن اين ocx رو چك كنيد و اگه نبود برنامه نصب فلش پلير رو اجرا كنيد
 

nasimeyas

New Member
با سلام و سپاس از زحمات تمام دوستان

بنده تمام بحث های پیرامون فلش را خواندم ولی مشکل اساسی که خودم تجربه کردم را در زیر برایتان می نویسم دوستان لطف کنند و راه کار ارائه دهند :

اول ---اگر هر ورژنی از فلش را همراه برنامه embedded کنیم ، وقتی پروژه تان از تعداد صفحات زیاد برخوردار باشد اولا هنگام لود اولیه کلی مکث دارد و وقت کاربر را می گیرد ، ثانیا وقتی کاربر در صفحات دیگر است و به صفحه اول بر میگردد مجدد دچار همان مکث می شود و ثالثا در هر بار ورود ابتدایی با وجود جدیدترین ورژن فلش که Embedded شده متاسفانه پیغام درخواست نصب و دانلود فلش از کاربر خواسته می شود .

دوم --- اگر فلش پلیر را در کنار برنامه قرار دهیم و با آدرس دهی ( از طریق صفحه اول ) آنرا نصب نمائیم ، مجدداً در هر بار لود برنامه exe مجدد فلش نصب می شود و وقت کاربر را می گیرد به اضافه ایراداتی که در بحث اول گفتم .

سوم--- به نظر بنده بهترین راه همراه بودن فلش پلیر در کنار برنامه می باشد به شرطی که وقتی برای بار اول در سیستم نصب شد با ایجاد دستوری در ریجستری در دفعات بعد از نصب آن جلوگیری شود .


حالا در خواست حقیر :

اولاً دوستان محبت نمایند کد دقیق نصب فلشی که کنار برنامه قرار دادیم را بیان کنند.
دوماً کد Save در ریجستری و فراخوانی آنرا دقیقا بگویند ( دوستان در بالا اشاره نمودند ولی کاملتر و عملی تر آنرا )
سوماً راه کاری برای Error دانلود و نصب فلش پلیر در ورود ابتدائی با وجود نصب فلش در سیستم پیدا کنند .

می بخشید سرتون رو درد آوردم ... از همتون ممنون و سپاسگذارم
 

evil_gates

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

اما اگه نسخه های بالاتری از swf رو استفاده می کنید و مطمئن نیستید که پشتیبانی از فلش برای اون نسخه شما تو سیستم کاربر نصب هست یا نه پیشنهاد من این بود که آخرین نسخه فلش پلیر رو به صورت مخفی نصب کنید.

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

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

کد رو هم تو پست های قبلی گفتم

در مورد ذخیره در رجیستری هم شما میتونید با استفاده از دستور SaveVariable مقداری رو در رجیستری ذخیره و با دستور LoadVariable اون رو از رجیستری فراخوانی کنید.

شما در این دستور دوتا پارامتر دارید. یکی نام کلید شما در رجیستری و دیگری مقدار اون کلید. تو مثال بالا myvar نام کلید و x مقدار اون هست.

موفق باشید.
 

moalla

Member
کد:
[LEFT]FileExist("<System>\Macromed\Flash\Flash10d.ocx","me")
If (me=0) Then
  Run("f:\projects\adobe flash player 10.1.51.45\setup.exe","hide, /s")
  Run("f:\projects\adobe flash player 10.1.51.45\patch.exe","hide, /s")
End
[/LEFT]

من اين كد رو خودم چند بار تست كردم و جواب ميده
فقط به ورژن فلش پليري كه نصب ميكنيد دقت كنيد. اوني كه من گذاشتم فايل Flash10d.ocx رو نصب ميكنه. اما مثلا ديدم يك برنامه نصب ديگه اكتيويكس Flash10a.ocx رو نصب ميكرد. پس براي حل اين مساله به پوشه سيستم 32 بريد و ببينيد فايل نصبي شما دقيقا چه اكتيويكسي رو نصب ميكنه

اميدوارم ديگه مشكل شما بصورت كامل حل شده باشه
 
آخرین ویرایش:

nasimeyas

New Member
با تشکر از زحمات دوستان و پاسخگوئی دلسوزانه تان

شما برنامه ای را سراغ دارید که بتوان با آن فایلهای اجرائی فلش را ( swf ) را تغییر ورژن داد مثلا با پلیرهای پائینتر هم مشکل اجرا نداشته باشند
اگه بصورت گروهی بشه این کار رو کرد که خیلی عالی میشه

از لطف همگی ممنون
 

moalla

Member
اگه توی فلشتون از امکان خاصی استفاده نکرده باشین و سورس اون رو داشته باشین میتونین موقع خروجی تعیین کنید که برای فلش پایین تری خروجی به شما بده اما اینکه swf که قبلا تولید شده رو بشه تغییر ورژن داد فکر نمیکنم امکانش باشه.
البته نمیفهمم چرا هنوز اصرار دارید که با فلش پلیر پایین تر اجرا بشه. با کدی که گذاشتم راحت میتونید هر فلشی رو اجرا کنید و کاربر اصلا متوجه نمیشه که آخرین نسخه فلش پلیر رو سیستمش نصب شده و نکته دیگه اینکه فقط بار اول این اتفاق میافته و در دفعات بعدی فلشر پلیر نصب نمیشه
 

جدیدترین ارسال ها

بالا