PDA

View Full Version : Deploy کردن برنامه با کامپوننت Dxperience



hdv212
یک شنبه 07 مرداد 1386, 12:38 عصر
سلام و خسته نباشید.
مدتی هست که روی کامپوننت 7.2.1 Dxperience کار میکنم، کرکش هم کردم منتها وقتی برنامه رو روی یه کامپیوتر دیگه اجرا میکنم، اجرا نمیشه و error میده(همون error ویندوز don't send ...)، همه ی کارا درسته، dll هاشم توی شاخه ی خود برنامه هم کپی کردم، نمیدونم چرا اجرا نمیشه، حتی اگه کامپوننت Dxperience رو از رو کامپیوتر خودمم پاک کنم باز روی سیستم خودمم اجرا نمیشه، لطفا اگه کسی از دوستان با این کامپوننت کار کرده به منم بگم چطوری باید برناممو برای اجرا روی سیستمهای دیگه پیکربندی کنم، مرسی.

moradidn
یک شنبه 07 مرداد 1386, 13:37 عصر
سلام
من هم دقیقا همین مشکل را دارم.
برای اینکه بتوانم برنامه را روی کامپیوتر دیگری اجرا کنم مجبور شدم DX را روی آن کامپیوتر نصب کنم.
فکر میکنم Dependency های خاصی دارد که Deployment در Visual Studio آنها را نمیشناسد.

مهدی کرامتی
یک شنبه 07 مرداد 1386, 14:17 عصر
بجای کپی کردن DLL ها در کنار برنامه تان آنها را بوسیله GACUTIL در GAC نصب کنید.

hdv212
یک شنبه 07 مرداد 1386, 15:27 عصر
بجای کپی کردن DLL ها در کنار برنامه تان آنها را بوسیله GACUTIL در GAC نصب کنید.

DelphiAssistant عزیز منظورت روی سیستم خودمونه یا روی سیستم مشتری و اینکه همون dll هایی که توی شاخه برنامه کپی کردیم رو در سیستم طرف با GACUTIL نصب کنیم ؟
وقتی روی سیستم مشتری، dllای وجود نداره، چطوری اون رو با GACUTIL در GAC نصب کنیم ؟ (چون شما میگی dll ها رو در برنامه کپی نکنیم، اونوقت دیگه dll ای وجود نداره)

omid_Ahmadi
یک شنبه 07 مرداد 1386, 19:47 عصر
فکر نکنم رجیستر کردن DLL ها در GAC بتونه مشکل رو حل کنه. باید قسمت دیگه ای مشکل داشته باشه. وقتی داری برنامه رو به صورت Release کامپایل می کنی، DLL ای که در فولدر Bin برنامه خودت کپی میکنه رو تست کن ببین مشکل داره یا نه. مطمئنناً اون DLL درست کرک نشده و نمی تونه کار کنه!

gomnam
یک شنبه 07 مرداد 1386, 21:31 عصر
این Dxperience چیست و چیکار میکنه؟

hdv212
دوشنبه 08 مرداد 1386, 00:42 صبح
فکر نکنم رجیستر کردن DLL ها در GAC بتونه مشکل رو حل کنه
omid_Ahmadi جان فکر کنم دقیقا مشکل ما رجیستر کردن dll ها در GAC است. چون من dxperience رو از روی سیستم پاک کردم، ولی باز برنامه روی سیستم خودم درست اجرا میشد، دوباره dxperience رو نصب کردم و اسمبلی ها رو با اسمبلی های کرک شده replace کردم باز درست کار میکرد (انگاری هیچ فرقی نمیکنه که dll کرک شده باشه یا dll اورجینال خودش)، فکر کنم فکر کنم dll ها باید توی GAC رجیستر بشه، حالا این GAC کجاست ؟ چطوری GACUTIL رو روی سیستم طرف اجرا کنیم که error نده ؟

مهدی کرامتی
دوشنبه 08 مرداد 1386, 02:14 صبح
GAC یا Global Assembly Cache یکی از انباره های دات نت برای نگهداری اسمبلی ها بصورت System Wide است. برای اطلاعات بیشتر درباره آن MSDN را مطالعه کنید.

برنامه شما احتمالا دارای یک اسکریپت یا برنامه نصب است، در برنامه فوق با امکانات برنامه نصاب و یا اجرای GacUtil میتوانید اسمبلی ها را هنگام نصب در GAC قرار دهید.

gomnam
دوشنبه 08 مرداد 1386, 17:27 عصر
بابا ما هم یه سوالی پرسیدیما
کسی جواب مارو نمیده ؟

مهدی کرامتی
دوشنبه 08 مرداد 1386, 17:44 عصر
اگر دوست داری بدونی چیه کلمه Dxperience رو تو گوگل جستجو کن تا بفهمی چیه.

hdv212
دوشنبه 08 مرداد 1386, 17:54 عصر
این ایمیلی هست که خود شرکتش بهم جواب داد، ضمن اینکه همه ی کارایی که گفت انجام دادم ولی بازم به نتیجه نرسیدم، یه نگاهی شما به لینکی که داده بکنید، شاید چیزی فهمدید :

Hello hamed,

First, thank you for your interest in our suites.

As for your question. First please make sure the .Net Framework 2.0
installed on the machine which have the problem. I should also say the
CopyLocal property for our assemblies should be set to False. I also
suggest that you review the "How to distribute applications which use
Developer Express .NET Windows Forms controls" article which can be found
at: www.devexpress.com/kbA240. This article should help you resolve the
problem.

hdv212
دوشنبه 08 مرداد 1386, 19:38 عصر
من تو سایت مایکروسافت این لینک رو در مورد gac پیدا کردم :
http://support.microsoft.com/kb/815808
توی قسمت دوم صفحه ی مذبور میگه اکثر ابزار های دات نت، در آدرس : C:\Program Files\Microsoft.NET\FrameworkSDK\Bin موجوده ولی اصلا من چنین آدرسی روی سیستمم ندارم، در داخل فولدر Microsoft.NET من فولدری به نام FrameworkSDK نیست. میشه دوستان یه نگاهی به لینک بالا بندازید.

gomnam
دوشنبه 08 مرداد 1386, 20:37 عصر
اگر دوست داری بدونی چیه کلمه Dxperience رو تو گوگل جستجو کن تا بفهمی چیه.

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

hdv212
دوشنبه 08 مرداد 1386, 22:16 عصر
gomnam جان، Dxperience یه ابزار توپ واسه خوشگل کردن برنامه توی دات نته.

و اما مشکل، من بالاخره gac رو پیدا کردم و همانا که توی مسیر C:\WINDOWS\assembly قرار داره، وقتی رفتم دیدم همه ی اسمبلی های devExpress توش رجیستر شده، رفتم اون اسمبلی هایی که برنامم بهش نیاز داره رو unInstall کردم، دیدم بازم برنامم کار میکنه ولی، برنامه مو همراه با اسمبلی های مورد نیاز ریختم روی سیستم دیگه و اجرا کردم، همچنان error میده، بعد یکی از اسمبلی ها رو کشیدم و توی مسیر C:\WINDOWS\assembly سیستم مورد نظر رها کردم، این پیغام رو بهم داد که فکر کنم مشکل اصلی همینه (عکس رو دانلود کنید)

کسی در مورد Private Key اطلاعاتی داره (من میخوام بدون ابزار gacutil اسمبلی رو روی سیستم طرف رجیستر کنم، چون gacutil یکی از ابزارهای vs هست و همینطوری روی سیستم طرف اجرا نمیشه و هزارتا error میده)

omid_Ahmadi
سه شنبه 09 مرداد 1386, 07:44 صبح
فولدر GAC که تو پیدا کردی، یه ساختار صوری رو بهت نمایش می ده، اون ساختاری که از این فولدر دیدی، ساختار اصلی اون نیست. برای اینکه بتونی ساختار اصلی رو مشاهده کنی با استفاده از Command Prompt وارد این فولدر شو.
باز هم می گم، قرار گرفتن DLL در این فولدر و یا در فولدر اصلی برنامه هیچ تاثیری در حل مشکل شما نداره. یعنی اصلاً منطق GAC این نیست، اگر DLL در GAC به درستی کار کنه، می تونید اون رو توی فولدر برنامه کپی کنید تا اونجا هم درست کار کنه.

در مورد اینکه DLL ای رو در GAC بدون GACUtil نصب کنید، خیر نمیشه! باید از GACUtil استفاده کنید. در ضمن، GACUtil جز فریم ورک به حساب میاد و در هر سیستمی که GAC وجود داشته باشه، حتما GACUtil هم وجود داره و به راحتی کار می کنه. برای نصب DLL هم حتما لازم نیست به صورت دستی از GACUtil استفاده کنید، با کپی کردن DLL توی فولدر GAC، اسمبلی به صورت اتوماتیک رجیستر میشه.

موفق باشید

omid_Ahmadi
سه شنبه 09 مرداد 1386, 07:45 صبح
در مورد PrivateKey هم در اولین فرصت واست مینویسم، ولی به اون چی کار داری؟

hdv212
سه شنبه 09 مرداد 1386, 18:14 عصر
omid_Ahmadi جان ممنون از لطفت.
من به نتایج جدیدی رسیدم و اون اینکه حتما باید اسمبلی ها در gac نصب بشه، در غیر این صورت پیغام خطا میده.
من روی سیستم دیگه هر کاری که بگین کردم، تا اینکه اسمبلی های اصلی خود dxperience رو در gac نصب کردم(با ماوس گرفتم و توی پوشه ی assembly رها کردم)، دیدم برنامه در عین ناباوری کار کرد، حتی اگه اسمبلی ها رو از فولدر فایل اجرایی برداری بازم کار میکنه، ولی مشکل اینجاس که فقط اسمبلی اصلی خودشو نصب میکنه و اگه اسمبلی کرک شده رو توش بکشی و رها کنی این پیغام رو میده :
Assembly Cache Viewer - Install Failed
---------------------------------------------
Strong name signature verification failed for assembly 'DevExpress.Data.v7.2.dll'. The
assembly may have been tampered with, or it was delay signed but not fully signed with
the correct private key.
--------------------------
OK
ولی با اینکه اسمبلی های اورجینال رو در سیستم طرف نصب کردم ولی برنامه بدون هیچ پیغامی مبنی بر اینکه trial هست نمیده، واقعا گیج شدم.
راستی من توی سیستمی که فقط dotnet 2 نصبه و vs نصب نیست، gacutil رو از کجا اجرا کنم ؟ من هر چی گشتم اینو پیدا نکردم، فقط توی vs پیدا کردم.

omid_Ahmadi
چهارشنبه 10 مرداد 1386, 07:33 صبح
نتیجه گیریت اشتباهه، هیچ ارتباطی به اینکه اسمبلی در GAC باشه و یا در فولدر اصلی برنامه نداره. خطایی هم که میده واضحه، اسمبلی دستکاری شده، اما مجدداً با استفاده از Public و Private Key مربوطه امضا نشده. به همین خاطر نمی تونه در GAC نصب بشه (و همچنین نمی تونه در صورتی که در فولدر اصلی برنامه باشه، توسط CLR اجرا بشه). اسمبلی رو خودت دست کاری کردی، نه؟

رضا عربلو
پنج شنبه 11 مرداد 1386, 00:28 صبح
دوست عزیز من هم همین مشکل را داشتم بعد متوجه شدم که به جای dll های کرک شده بایستی خود dll های اصلی DXperience را همراه با برنامه دیپلوی کنم. با این کار مشکل من حل شد و هیچ پیغام trialی نیز در هنگام اجرای برنامه ها ظاهر نمی شود.
در ضمن کامپاننت های dxperince حروف فارسی را می کشند مثلاً کلمه شرکت را به صورت شـــرکــت نمایش می دهد چجور با این باگ کنار آمدی؟

hdv212
پنج شنبه 11 مرداد 1386, 11:55 صبح
اسمبلی رو خودت دست کاری کردی، نه؟
نه امید جان من دستکاری نکردم، خب راه حل مشکل من به نظر شما چیه ؟


بعد متوجه شدم که به جای dll های کرک شده بایستی خود dll های اصلی DXperience را همراه با برنامه دیپلوی کنم
رضا جان یعنی اصلا از فایل کرک استفاده نکردی ؟ خب اگه اینطوری باشه که شرکتش ورشکست میشه که. در ضمن من از اسمبلی های اصلیش هم استفاده کردم ولی تا توی gac نصب نشه کر نمیکنه، یکی به من نحوه ی رجیستر کردن اسمبلی ها رو در gac بگه، من که نمیتونم هر نرم افزاری که فروخته میشه برم اسمبلی ها رو توی سیستم طرف drag and drop کنم.


کلمه شرکت را به صورت شـــرکــت نمایش می دهد چجور با این باگ کنار آمدی؟
راستش من حدود 1 سال پیش هم قصد داشتم از همین کامپوننت استفاده کنم، ولی باز به همین مشکل منتها به طریق دیگه برخورد کردم یعنی پروژم بالا نمیومد، مجبور شدم پروژمو از اول بنویسم و دیگه تا عمر دارم از کامپوننت استفاده نکنم، ولی چند ماه پیش یه نرم افزار جامع کشوری از طرف سازمان بهزیستی به دستم رسید که دیدم از این کامپوننت خوب استفاده کردم، منم با خودم گفتم حتما با این کامپوننت میشه کار کرد که اینا کار کردن، این شد که منم دوباره اومدم سمت این کامپوننت ولی این مطلبی که شما گفتی رو توجه نکرده بودم.

omid_Ahmadi
پنج شنبه 11 مرداد 1386, 17:50 عصر
وقتی یه DLL می خواد از طرف یه شرکت توزیع بشه، با استفاده از قسمت Private Key کد گذاری میشه، می تونی روش کامل کار رو توی MSDN بخونی اما خلاصه کار به این صورته که محتوی فایل اجرایی با استفاده از روش SHA-1 ، هش میشه، حاصل با استفاده از Private Key کد میشه و مجدداً نتیجه با استفاده از همون روش (SHA-1) هش میشه. هش دوم در فایل اجرایی به عنوان RSA Digital Signature ذخیره می شه.
قسمت Public Key هم در فایل قرار داده میشه (در قسمت AssemblyDef در متادیتا). زمانی که اسمبلی بخواد در GAC نصب بشه، GAC محتوی اون رو Hash کرده و حاصل رو با Hashای که در قسمت قبلی گفتم مقایسه می کنه، اگر این دو نابرابر بودن، نشون میده که اسمبلی بعد از توزیع دستکاری شده (توسط هر شخصی، به جز افراد شرکت) و بعد از اون دستکاری هم، طرفی که فایل رو دستکاری کرده به Private Key دسترسی نداشته که دوباره فایل رو کد کنه. پس فایل قابل استفاده نبوده و خطایی که در بالا گفتی رخ می ده.

البته همونطور که در متن خطا گفته شده، یه دلیل دیگه هم وجود داره و اون هم Delay Signing هست، که ... بعید می دونم اسمبلی delay signed گرفته باشی، به همین خاطر در مورد اون نمی نویسم.

در مورد سوالت برای نصب اسمبلی در GAC هم به متن زیر توجه کن:



The GACUtil.exe tool doesn’t ship with the end-user .NET Framework redistributable
package. If your application includes some assemblies that you want deployed into the GAC,
you must use the Windows Installer (MSI) version 2 or later because MSI is the only tool that
is guaranteed to be on end-user machines and capable of installing assemblies into the
GAC. (You can determine which version of the Windows Installer is installed by running
MSIExec.exe.)


موفق باشی.

hdv212
پنج شنبه 11 مرداد 1386, 18:24 عصر
omid_Ahmadi عزیز ممنون از لطفت، خب یعنی من اسمبلیهارو توی یه پروژه ی windows installer ای که مثلا با installShield یا vs ساختم، اضافه کنم، بعد اون خودش داخل gac نصب میکنه ؟

omid_Ahmadi
جمعه 12 مرداد 1386, 17:20 عصر
من از Windows Installer استفاده نکردم، می تونی این مورد رو خودت تست کنی. من سرنخ رو بهت گفتم، سرچش با خودت. امیدوارم به دردت خورده باشه.

موفق باشی.

رضا عربلو
شنبه 20 مرداد 1386, 12:40 عصر
hdv212 جان.
من اسمبلی را کرک نکرده ام بلکه کرکش را در اینترنت پیداکردم و استفاده کردم (فکر می کنم نسخه 7.1.1).
و به روشی که قبلا گفتم تونستم برنامه ام را در کامپیوتر دیگر اجرا کنم.
در مورد کرک هم بگم گه کرکش گفته بود از سه دستو زیر برای قرار دادن dll های کرک شده در gac استفاده کنید(محتوای فایل بچ):

echo off
call D:\"Program Files"\"Microsoft Visual Studio 8"\SDK\v2.0\Bin\sdkvars.bat
color 0a
gacutil /u "DevExpress.Data.v7.1"
gacutil /u "DevExpress.Web.v7.1"
gacutil /u "DevExpress.Web.ASPxDataControls.v7.1"
echo **************************************
echo ذ¶شطحê±د£¬؟ھت¼°²×°ئئ½â°و
pause
for %%c in (*.dll) do sn -Vr %%c
for %%c in (*.dll) do gacutil /if %%c
for %%c in (*.dll) do sn -Vu %%c
echo **************************************
echo °²×°حê±د،£،£،£،£
echo on
pause

hdv212
شنبه 20 مرداد 1386, 16:15 عصر
رضا عربلو جان ممنون از لطفت، دلیل این مشکلاتم فقط به خاطر کرکش بود، یعنی احتمالا درست کرک نمیشد و به قول omid_Ahmadi عزیز، devexpress میفهمه که dll مورد نظر دستکاری شده، یه کرکی از دوستان گرفتم، مشکلم حل شد، دیگه نیازی به gac نداره، از همه ی دوستان متشکرم

رضا عربلو
شنبه 20 مرداد 1386, 16:26 عصر
با اون مشکل کشیده شدن حروف فارسی چی کار کردی؟

hdv212
شنبه 20 مرداد 1386, 17:39 عصر
کماکان بر سرجاش باقیه، خیلی دارم با این کامپوننت دردسر میکشم، مثلا یکیش خاصیت RightToLeft کامپوننت XtraGrid هست که وقتی روی yes میذارم، هیچ رفتاری از خودش نشون نمیده و ستون هامو راست به چب نمیکنه، مجبور شدم از خود designer خودش برم یکی یکی ستونها رو به راست بکشم.

black_hole
جمعه 11 مرداد 1387, 15:41 عصر
باسلام .من از این کامپوننت در برنامه ای که با سی شارپ نوشتم استفاده کردم اما یه مشکل اساسی داره اونم اینه که وقتی فرمهامو با این کامپوننت طراحی میکنم وقتی برنامه ران میشه اگر فرم را چندبار با کلیک وارد تسک بار کنم و دوباره نمایش بدم درهربار تغببر وضعیت سایز دیالوگ هی کوچیک میشه و ایزارهای داخل فرم را جابجاودر نهایت محو میشن.
امیدوارم منظورم رو فهمیده باشین.
مشکل چیه؟

Nima NT
جمعه 11 مرداد 1387, 16:59 عصر
با سلام ، شما دوستان و اساتیدی که با این کامپوننت کار میکنید چرا برای Publish کردن برنامه از Xencode استفاده نمیکنید ، این برنامه تمامی زیر شاخه های یه کامپوننت رو هم به خودش وصل میکنه ، شاید اینطوری این مشکل هم حل بشه ، اگه احیانا" چرت گفتم عذرخواهی میکنم ، چون برداشت من از مشکل این کامپوننت این بود.

hdv212
جمعه 11 مرداد 1387, 18:02 عصر
باسلام .من از این کامپوننت در برنامه ای که با سی شارپ نوشتم استفاده کردم اما یه مشکل اساسی داره اونم اینه که وقتی فرمهامو با این کامپوننت طراحی میکنم وقتی برنامه ران میشه اگر فرم را چندبار با کلیک وارد تسک بار کنم و دوباره نمایش بدم درهربار تغببر وضعیت سایز دیالوگ هی کوچیک میشه و ایزارهای داخل فرم را جابجاودر نهایت محو میشن.
امیدوارم منظورم رو فهمیده باشین.
مشکل چیه؟

همانطور که خودت گفتی، من مشکل شما رو متوجه نشدم، یعنی چند بار برنامه ات رو اجرا میکنی ؟
منظورت از TaskBar چیه ؟
این مشکل واسه DevExpress نیست، مربوط به برنامه ی خودت هست، میشه واضح تر و کاملتر بگی که منظورت چیه ؟

black_hole
شنبه 12 مرداد 1387, 10:41 صبح
منظورم اینه که وقتی برنامه را ران میکنم و فرم اجرا میشه حالا چندبار فرم را مخفی کرده (وارد تولبار ویندوز میشه )دوباره نمایش میدم اندازه فرم هر دفعه کوچکتر میشه