Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Đóng gói và triển khai ứng dụng trong VS2005

Bài này được tìm thấy dưới dạng file Word của mr.dangthanhtung@gmail.com, không biết link gốc ở đâu. Post lên để các bạn cùng tham khảo. Ai biết link gốc thì send lại để cập nhật.

Package and Deploy in VS2005 Studio

1. Giới thiệu:

- Có một thời trước đây , đa số máy tính người dùng có một thời kỳ khủng hoảng trong việc cài đặt ứng dụng Windows . Ví dụ , khi bạn cài đặt 1 version mới của 1 ứng dụng nào đó hay 1 ứng dụng không liên quan gì tới 1 ứng dụng đã cài trong máy của bạn , quá trình cài đặt sẽ copy version của dlls vào thư mục hệ thống và thay đổi thiết lập trong registry . Quá trình cài đặt này có thể gây nguy hiểm ứng dụng khác trong cùng máy client đó , đặc biệt nếu tồn tại 1 ứng dụng đang dùng chung với các componient . Nếu các componient đó tương thích lùi với các phiên bản trước , that’s okei , nhưng đa số trường hợp nó không có khả năng tương thích lùi với các phiên bản cũ hơn . Thì lúc đó bạn buộc phải nâng cấp các phần mềm khác , hoặc tệ hơn là không dùng được nữa . Vấn đề khó chịu đó được gọi là DLL Hell

- Nói thêm về cơn ác mộng DLL . Giả sử kịch bản sau : bạn cài đặt ứng dụng A của trên máy của bạn , nạp một số DLL của Windows . Nó hoạt động ngon lành trong nhiều năm . Sau đó bạn cài đặt ứng dụng B cũng trên máy của bạn và thình lình không chờ đợi , ứng dụng A “sụm bà chè” không nói không rằng . Mà ứng dụng B không dính dạng ứng dụng A . Việc gì xảy ra ? Cuối cùng bạn phát hiện ra là : ứng dụng B đã thay thế một số DLL mà ứng dụng A cần đến , và thình lình ứng dụng A bằt đầu lảo đảo và bất động .

- Theo nguyên tắc , DLL phải tương thích lùi (backward-comatible) . Vì DLL mới được thêm vào máy , thì ứng dụng cũ xưa thình lình được kết nối với 1 DLL không tương thích với những gì ứng dụng chờ đợi và thế là xong đời . Hiện tượng này khiến cho khách hàng windows phải nâng cấp chương trình hiện hữu và cũng là 1 trong những lý do bảo rằng các máy sử dụng Windows bất ổn . Với assembly của .NET thì cơn ác mộng sẽ biến mất .

- Bạn muốn triển khai ứng dụng của bạn bằng một chương trình cài đặt có thể chép file thực thi , tạo shorcut , thêm các thiết lập Registry … Có nhiều chương trình phục vụ cho việc đóng gói phần mềm trở nên dễ dàng hơn bao giờ hết , ví dụ như : WiseInstall for .net, InstallShield, InstallAnywhere for .net , Nsis …

- Hôm nay mình sẽ giới thiệu 1 công cụ hỗ trọ đóng gói phần mềm đó là Microsoft Visual Studio 2005 .

- Với mô hình triển khai “zero-touch” của .NET , bạn có thể chép file ứng dụng đã được biên dịch sang bất kỳ máy tính nào khác mà không phải đăng ký các thành phần này hay chỉnh sửa các Registry . Tuy nhiên , hầu hết các ứng dụng chuyên nghiệp đều đòi hỏi có 1 chương trình cài đặt tự động để chép các file vào vị trí thích hợp và thêm các shortcut của ứng dụng vào Start Menu hay với nhiều cấu hình tự động khác nữa . Microsoft Visual Studio .NET cho phép xây dựng kiểu chương trình cài đặt như thế với một dự án cài đặt hay người ta gọi là (Setup Project)

- Setup Project là 1 kiểu Project đặc biệt trong Visual Studio .NET . Khác với kiểu Project khác , nó thuộc dạng không đặc thù ngôn ngữ . Thay vì viết mã kịch bản cài đặt , bạn cấu hình tùy chọn cài đặt thông qua GUI . Sau đó Project này được biên dịch thành 1 ứng dụng cài đặt Windows Installer (file .msi)

Các tính năng mà công cụ đóng gói của VS.net hổ trợ :

- Chương trình tự động phát sinh cùng lúc cả Install và Uninstall lúc Compile

- Tạo Shortcut

- Cho phép tạo chương trình Install gồm nhiều đồ án, nhiều chương trình thực thi và nhiều thư viện

- Tùy chọn đường dẫn cài đặt

- Kiểm soát được tình huống cài đặt :

o Cài đặt lần đầu

o Remove

o Repair

o Khi chương trình đã được cài đặt thì lần tiếp theo xuất hiện hộp thoại cho chúng ta lựa chọn Repair hoặc Remove

- …..v…v

VS.net hỗ trợ 6 kiểu tạo file setup như sau:

1. Setup Project : tạo bộ đóng gói cho ứng dụng Windows (hay còn gói là ứng dụng chạy trên Desktop).

2. Merge Module Project : Tạo ra file .msm , đóng gói các components cho phép bạn chia sẽ các components đó giữa nhiều Project hoặc nhiều ứng dụng.

3. CAB Project : Cho phép bạn tạo 1 file .cab để nén ActiveX controls chứ không phải những ứng dụng, tuy nhiên có thể được download từ Web server tới trình duyệt web

4. Web Setup Project : Cho phép bạn triển khai 1 ứng dụng Web tới web server. Bạn tạo 1 Web Setup project, build nó tạo ra file đóng gói , copy file đó tới Web Server, và chạy file đó để cài đặt ứng dụng này trên server, sử dụng những Setting định nghĩa Web Setup project của bạn.

5. Smart Device CAB Project : tạo Cab project để cài đặt trên ứng dụng trên thiết bị di động.

6. Setup Wizard : nếu bạn không rõ mình dùng loại đóng gói nào thì dùng lựa chọn này để dùng trình thuật sỹ Wizard sẽ hướng dẫn chúng ta đi từng bước trong suốt quá trình tạo file đóng gói . Áp dụng cho mọi loại ứng dụng , kể cả ứng dụng Web.

Chúng ta xét 2 hổ trợ đó là Setup WizardSetup Project . Thực ra chỉ cần tìm hiểu Setup Wizard là đủ vì Setup Wizard đã có bao hàm Setup Project.

2. Một số thuật ngữ trong bài viết

Một số thuật ngữ chỉ có áp dụng trong nội dung bài hướng dẫn này thôi , ngoài phạm vi bài này, ý nghĩa của các từ có thể khác nhiều đi .

  • Target Machine = Target Computer = Client: máy tính của khách hàng chạy file setup do bạn tạo ra.
  • Application : chương trình do bạn viết ra và muốn đóng gói lại .
  • Setup : là 1 ứng dụng hay quá trình cho phép bạn đóng gói ứng dụng của bạn thành 1 định dạng easy-to-deploy , với định dạng easy-to-deploy bạn có thể dễ dàng install ứng dụng vào máy client .
  • Deploy : triển khai chương trình tới máy client.
  • Deployment : là quá trình đem ứng dụng của bạn và install nó vào máy khác , đa số dùng thêm 1 ứng dụng setup khác.
  • Project : là Project mình muốn đóng gói lại
  • Setup Project : là Project mình đang thao tác , cấu hình project để tạo file setup.
  • Setup File : là file kết quả tạo ra khi build Setup Project , file này để cài đặt trên Target Computer.
  • Windows Installer :

3. Tìm hiểu cơ chế đánh phiên bản của .NET

Như bạn đã biết , .NET Runtime không buồn kiểm tra phiên bản đối với private assembly . Nhưng khi “chơi” với shared assembly thì vấn đề phiên bản lại trở thành quan trọng , bây giờ ta tìm hiểu cơ chế đánh số phiên bản (gọi là versioning ) và kiểm tra đối với shared assembly .

Trên .NET các shared assembly được nhận diện được nhận diện duy nhất thông qua tên và version . GAC (Global Assembly Cache ) cho phép các phiên bản khác sống side-by-side , nghĩa là phiên bản cũ vẫn hiện diện cùng với phiên bản mới . Như vậy các ứng dụng có thể dùng bất cứ phiên bản nào mà nó thích , tuỳ thuộc ứng dụng đó , cũ cũng có , mới cũng có sẵn .

Một con số đánh dấu version của 1 assembly trong giống như sau : 1:0:2204:21 , nghĩa là 4 con số phân cách bởi dấu ‘:’ . 2 số đầu (1:0) được gọi là major và minor . Con số thứ 3 là số build và con số thứ 4 là số revision (số chỉnh sửa duyệt lại) .

Khi 2 assemply có số major và minor khác nhau thì được xem là không tương thích (incompatible) . Khi các assembly khác nhau số Major và minor , thì bạn có thể chắc chắn là có nhiều thay đổi đánh kể (như đổi tên các hàm hành sự , kiểu dữ liệu , kiểu thông số bị thay đổi , v.v… Do đó , nếu ứng dụng client yêu cầu gắn kết với phiên bản 2.5 nhưng GAC chỉ có phiên bản 2.0 thì yêu cầu gắn kết thất bại (trừ khi bản chỉnh sửa tập tin cấu hình của ứng dụng) .

Khi 2 version cùng số major và minor nhưng lại có số build khác nhu thì .NET Runtime giả định chúng có thể tương thích với nhau (tương thích nhưng không bảo đảm lắm) . Cuối cùng nếu 3 số đầu giống nhau, chỉ khách số revision (còn gọi là QFE Quick Fix Engineering) thì được xem là hoàn toàn tương thích .

Số QFE dành cho những lần sửa chữa bug . Nếu bạn sửa 1bug và cho biết là DLL của bạn hoàn toàn tương thích đối với phiên bản hiện hữu , thì bạn phải tăng con số revision . Khi 1 ứng dụng nạp 1 assemply , thì nó cho biết version major và minor muốn nạp , và AssemblyResolver sẽ tìm ra con số build và revision cao nhất .

4. Cách 1 : Các bước tạo một chương trình setup bằng Setup Wizard

B1. Trong Solution Explorer của VS.net , right click vào Solution.

Trong menu popup, vào mục Add –> New project . Xuất hiện hộp thoại Add new project. (H1 và H2)

>clip_image001

Trong hộp thoại Add new project:

clip_image002

B2.

- Bên trái là Project Types: Chọn Other Project Types –> Setup and Deployment

- Bên phải là Templates: Chọn Setup Wizard.

Đặt tên Project mới vào trường name

Chọn đường dẫn cần lưu thư mục tại trường Location

Sau khi click Ok, VS.net sẽ tự động hiển thị hộp thoại là Setup Wizard (1 of 5). Click chọn Next (H3)

clip_image004

clip_image005

B3. Hộp thoại thứ 2 là Setup Wizard (2 of 5) xuất hiện . (H4)

Hộp thoại này cho phép chọn kiểu Project

Trong trường hợp này chúng ta giả sử đóng gói ứng dụng Windows nên đánh dấu check vào radio button : Create a setup for a Windows application.

Còn nếu là ứng dụng Web thì ta chọn radio button : Create a setup for a web application.

Next tiếp :

clip_image006

B4. Hộp thoại thứ 3 là Setup Wizard (3 of 5) xuất hiện . (H5)

Hộp thoại này chứa các loại output mà chúng ta có thể đưa vào file Setup

XXX là tên project cần đóng gói .

  • Localized resources from XXX :
  • XML Serialization Assemblies from XXX :
  • Content Files from XXX : chứa toàn bộ file chứa trong project XXX , cái này không cần thiết phải chọn.
  • Primary output from XXX : chứa file exe và file dll của prject XXX , cái này tất nhiên phải chọn rồi.
  • Source files from XXX : chứa file source code của project cần đóng gói như file css , vb , cpp …
  • Debug Symbols from XXX : chứa một số file hỗ trợ debug của dự án .
  • Documentation Files XXX : (tài liệu XML của dự án, cái này liên quan đến các commnets viết theo qui tắc convention của .Net) . Có thể đưa vào hoặc không.
  • Built Output from …: tạo ra file MSI
  • Primary Output (chứa các DLL và EXE do Project phía trên tạo ra) – đương nhiên phải đưa vào

Bạn muốn biết thêm thông tin thì có thể xem Description ở bên dưới của hộp thoại đó.

Sau khi chọn xong nhấn Next.

B5. Hộp thoại thứ 4 là Setup Wizard (4 of 5) xuất hiện (xem H6)

clip_image007

Hộp thoại cho phép chọn file đính kèm theo như file Help , ReadMe …

Nếu muốn thêm file nào thì chọn Add -> chọn đường dẫn của file đó. Nếu không thì chọn Next.

B6. Hộp thoại thứ 5 xuất hiện Setup wizard (5 of 5) thông báo tóm tắt nội dung kết quả. (xem H8)

< ![endif]–clip_image008

Hình 7

B7. Chọn Finish để kết thúc quá trình tạo file cài đặt .

B8. Sau khi nhấn nút Finish trong Wizard cuối cùng thì màn hình (xem H8) hiện ra.

>clip_image009

Hình 8: File System Designer

Trong Solution Explorer xuất hiện thêm Project , người ta gọi là Setup Project .

Tới đây có thể tạm thời gọi là xong , nhưng chúng ta phải qua một số bước cấu hình để tạo ra file setup đóng gói phần mềm theo ý mình .

5. Cách 2 : Các bước tạo chương trình với setup bằng Setup Project

1. Mở Solution Explorer của VS.net ra, right click vào Solution.

Trong menu thả ra, vào mục Add -> New project –> Xuất hiện hộp thoại Add new project (H12).

clip_image010

Hình 9

2. Trong hộp thoại Add new project (H13):

clip_image011

Hình 10

- Bên trái có Project Types: Chọn Other Project Types –> Setup and Deployment

- Bên phải có Templates: Chọn Setup Project.

- Đặt tên Setup Project vào trường name

- Chọn đường dẫn cần lưu thư mục tại trường Location

3. Sau khi click Ok -> VS.net sẽ tự động hiển thị Child window là File System ở dạng Explorer. Chưa làm gì với Window này vội.

clip_image012

Hình 11

4. Lại mở Solution Explorer, right click vào Setup Project vừa tạo.Trong menu thả ra, Chọn AddàProject Output –> xuất hiện hộp thoại: Add Project Output Group

clip_image013

Hình 12

Combobox đầu tiên tên là Project chứa danh sach các Project hiện có trong Solution , chọn 1 project mà bạn muốn đóng gói .

ListBox thứ hai chứa các loại đầu ra (output) lấy từ tên Project của combobox trên mà chúng ta có thể đưa vào toàn bộ Setup .

  • Primary Output : chứa file exe và file dll của prject XXX , cái này tất nhiên phải chọn rồi.
  • Localized resources :
  • Debug symbol : chứa một số file hỗ trợ debug của dự án .
  • Content Files : chứa toàn bộ file chứa trong project XXX , cái này không cần thiết phải chọn.
  • Source files : chứa file source code của project cần đóng gói như file css , vb , cpp …
  • Documentation Files : (tài liệu XML của dự án, cái này liên quan đến các commnets viết theo qui tắc convention của .Net) . Có thể đưa vào hoặc không.
  • XML Serialization Assemblies :

Các thứ khác thì có thể xem Description của hộp thoại đó.

Khi chọn xong những Project và ouput cần đưa vào Setup Project thì VS sẽ gói tất cả vào và khi cài đặt sẽ bung ra ở máy người dùng. Đấy là nguyên lý, còn bây giờ chưa gói mà phải Build nhưng đừng Build vội

Có những thứ không tự động thêm vào Setup thì chúng ta phải dùng Child Window File System để thêm. Chúng ta có thể tạo thêm các thư mục, Shortcut, đưa các file từ Source Machine đến Target Machine,…..vv .

Các loại  Setup Editors

Khi bạn triển khai 1 ứng dụng , bạn muốn thực hiện 1 thao tác đặc biệt  nào đó như thay đổi cấu trúc thư mục của ứng dụng trên máy client , thêm 1 số registry , và đặt một số điều kiệm kiểm tra đặc biết nào đó , thay đổi GUI trong quá trình cài đặt . Với VS.NET bạn có thể làm điều đó rất dễ dàng . VS.NET cung cấp một số editor sau :

  • File System Editor: editor này được dùng để add files vào gói cài đặt  .
  • Registry Editor: editor này bạn có thể thêm một số key vào registry của máy client .
  • File Types Editor: editor này cho phép liên kết loại file nào đó tới ứng dụng của bạn
  • User Interface Editor: editor này cho phép bạn cấu hình một số GUI của dialog được show trong suốt quá trình cài đặt .
  • Custom action s Editor: với editor này , bạn tự chỉ định chương trình nào đó mà bạn muốn installer gọi khi install hay uninstall.
  • Launch condition s Editor: editor này cho phép bạn kiểm tra các yêu cầu tối thiểu cho ứng dụng của bạn install trên máy client .

Mục tiếp theo , bạn sẽ tìm hiểu sâu hơn về tất cả editor trên .

1.1. File System Editor

Nhìn cái tên là bạn biết editor này có chức năng gì , editor này cho phép bạn add vào Project Output những file như assemply , các file output vào thư mục xác định nào đó , bạn có thể xác định vị trí nơi các file này sẽ được install tới máy client . File System Editor mở bằng cách sau :

-         Click phải Project trong Solution Explorer , và chọn View as File System để hiện thị File System . Tại đây bạn có thể chỉ định các file cài đặt . (H13)

-         Trên cửa sổ File System (mặc định đang được mở, nếu chưa có thể mở ra bằng cách nhấn phải chuột trên project cài đặt -> View -> File System)

File System Editor cung cấp một số folder đặc biệt được định nghĩa trước , mà bạn có thể add vào gói cài đặt của bạn .Môt số  folder quan trọng trong File System Editor là:

  • Application Folder: Application Folder đại diện cho thư mục sau :  [ProgramFilesFolder][Manufacturer][ProductName]. Thư mục Manufacturer ProductName sẽ được chỉ định bằng cửa sổ Properties .
  • Global Assembly Cache Folder: Thư mục này cho phép bạn thêm các assembly được install dưới dạng  shared assemblies trên máy client .
  • User’s Desktop: chỉ định các files sẽ xuất hiện trên Desktop người dùng . Vị trị mặc định thường là folder [DriveName]\Documents and Settings\[UserName]\Desktop, với UserName đại diện cho tên tài khoản của người dùng trên máy client.
  • User’s Program Menu: đường dẫn mặc định thường là [DriveName]\Documents and Settings\[UserName]\Start Menu\Programs, với UserName đại diện cho tên tài khoản của người dùng trên máy client.

VD :

-         Tạo thêm thư mục Bin, Database (giả sửa có dùng file CSDL Access) bằng cách nhấn phải chuột trên biểu tượng Application Folder -> Add -> Folder (xem H13).

clip_image014

Hình  13: Add thư mục

-         Kéo thả biểu tượng Primary output … trong thư mục Application Folder vào thư mục Bin vừa tạo. Tức là ta muốn các file EXE và file DLL(H14)

clip_image015

Hình  14 : Add file

-         Đưa tập tin .mdb vào trình cài đặt (nếu sử dụng CSDL Access) bằng cách nhấn phải chuột trên biểu tượng Application Folder -> Add -> File … Chọn tập tin .mdb cần thiết (H16)

-         Tương tự như vậy ta có thể sắp xếp các file sau khi cài đặt vào các thư mục mong muốn , bằng các tạo các thư mục con trong Application Folder rồi kéo các file trong thư mục con Application Folder vào thư mục con tương ứng.

clip_image016

Hình  15 : Insert file database

Lưu ý : Ban đầu , File System Designer chỉ hiện thị một số thư mục thường được sử dụng . Bạn có thể liên kết thêm các thư mục bằng cách nhấp phải vào vùng trống và chọn Add Special Folder . Có các tùy chọn ánh xạ đến thư mục Font , Favorites , Starup … của máy tính , cho phép bạn cài đặt các file và các shortcut ở các vị trí khác nhau .

Lưu ý : Khi các bạn sắp xếp các file ở các thư mục khác nhau , sẽ ảnh hưởng tới đường dẫn tương đối của các file liên quan đến nhau . VD như file CSDL , do đó bạn phải đảm bảo source code của bạn thay đổi phù hợp đường dẫn đó .

1.1.1. Tạo shorcut

-         Tạo shortcut cho chương trình: nhấn phải chuột trên biểu tượng Primary output … -> Create Shortcut to Primary output From … một shortcut được tạo ra trong cùng thư mục -> đặt lại tên nếu muốn -> kéo biểu tượng này vào User’s Desktop, nếu muốn trên Desktop sẽ có shortcut của chương trình, thực hiện tương tự cho shortcut trong User’s Programs Menu (không dùng cho Web Application)

clip_image018

Hình  16

1.1.2. Add Assembly vào GAC

-          Giả sử bạn muốn add thêm 1 assembly độc lập được dùng bởi ứng dụng của bạn  vào thư mục  Global Assembly Cache . Để làm điều này , bạn mở File System Editor bằng cách chọn menu  View ->Editor ->File System Editor . Sau đó , click chuột phải vào folder File System và chọn  Add Special Folder -> Global Assembly Cache Folder . Khi đó sẽ xuất hiện thư mục con của  File System . Bây giờ bạn có thể add assembly của bạn vào Global Assembly Cache folder. Bằng cách click phải Global Assembly Cache folder và chọn Add -> Assembly .  Trong hộp thoại Component Selector , chọn assembly mà bạn muốn add vào . Sau khi add xong thì lúc install nó sẽ copy assembly đó vào folder Global Assembly Cache ở máy client .

clip_image020

Hình 17

1.2. Registry Editor

-          Nhìn cái tên là bạn đã biết editor này làm gì , nó cho phép quản lý các giá trị các registry key của máy client . Mặc định registry editor hiện thỉ các key chuẩn của Windows registry như sau : HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, và HKEY_USERS

-         Việc khi thêm hay thiết lập registry trong quá trình cài đặt là việc làm thường xuyên “ở huyện” , hầu như 1 ứng dụng nào đó đều ghi thêm “tí tẹo” nào đó để đánh dấu sự hiện diện của nó trong máy client , ngay cả các thành phần portable cũng không thoát khỏi ngoại lệ này .

-         Click chuột phải vào Setup Project->View->Registry . Cửa sổ Registry  On Target Machine hiện lên (H17).

clip_image022

Hình 18

VD :

-          Registry editor đại diện cho cấu trúc của registry editor ở máy client . Vd , chúng ta add 1 key nằm trong trong HKEY_LOCAL_MACHINE. Bằng cách click phải vào nhánh HKEY_LOCAL_MACHINE , chọn New Key , và key con tên là Software. Cứ như thế bạn có thể add các key phân cấp giống như hình sau :

clip_image023

Hình 19

-          Sau đó bạn install phần mềm tại máy client thì cấu trúc phân nhánh key trong registry của máy client giống y chang trong lúc bạn cấu hình bằng Registry Editor như hình trên.

-         Các thông tin thường tạo là [Tên công ty] , [version] v.v…

1.3. File Types Editor

-         Mục đích : bạn muốn ứng dụng của bạn tự động mở khi người dùng chọn kiểu file nào đó trong Windows Explorer.

-         Bạn có thể đăng ký các kiểu file bằng cách chỉnh sửa Registry bằng tay . Tuy nhiên cách đó rất nguy hiểm dễ gây hỏng Windows nếu user không am hiểu rõ về registry . Có một cách hay hơn là thực hiện các cấu hình này một lượt (lúc cài đặt) với các tính năng đi cùng với Setup Project .

-         1 . Click phải chuột vào Setup Project trong Solution Explorer và chọn View->File Types  để hiện thị File Type Designer (H14)

clip_image025

Hình  20 : File Type Designer .

-         2. Click phải File Type Designer và chọn Add File Type . Đối với mỗi kiểu file bạn phải chỉ định các thông tin sau :

Property

Purpose

Name

Tên có phạm vi trong File types editor để định danh 1 loại file đặc biết nào đó .

Command

Chỉ định file exe nào được chạy khi người dùng mở file có đuôi ở thuộc tính Extensions .

Extensions

Chỉ rõ đuôi mở rộng file với cách thực thi được đăng ký ở trên .

Icon

Chỉ định icon cho file đó.

Description

Cung cấp 1 số thông tin miêu tả thêm về file.

clip_image027

Hình  21 : Thêm 1 kiểu file

-         3.  Thêm các hành động hỗ trợ cho kiểu file,  có 3 mẩu thông tin

  • Name : mô tả hành động (VD , trong 1 menu ngữ cảnh của Windows Explorer)
  • Argument : là các đối số dòng lệnh sẽ được truyền cho ứng dụng . Biểu tượng “%l” nghĩa là truyền tên file . Thông thường , 1 thao tác open sẽ chỉ truyền tên file , trong khi các hành động khác có thể truyền thêm đối số (VD lệnh print có thể truyền tên file và đối số /p). Chương trình bạn phải kiểm tra các đối số dòng lệnh và thự hiện hành động thích hợp (trong trường hợp này là mở file) , như được mô tả trong H15
  • Verb : cho biết kiểu hành động , như open hay print


Hình  22 : Thêm hành động cho kiểu file

Lưu ý : Đừng sử dụng File Type Designer để tiếp quản các kiểu file căn bản .bmp , .mp3 , .html . Hầu hết người dùng máy tính đều có các ứng dụng mà họ ưu chuộng để truy xuất các kiểu file này , và việc ghi đè các sở thích này chỉ làm tức giận người dùng của bạn mà thôi.

1.4. Custom Actions Editor

-          Editor này cho phép bạn liên kết quá trình cài đặt với chương trình khác sẽ được gọi khởi động vào cuối quá trình cài đặt .Để tạo 1  custom action , tạo 1  .dll hay .exe đại diên cho custom action và add nó vào deployment project. Nên nhớ rằng custom action chỉ được thực thi vào lúc cuối quá trình cài đặt .

-          VD : Nếu bạn muốn tạo dialog  ReadMe , có thể User Interface  Editor có hỗ trợ bạn làm điều đó , nhưng bạn muối dialog ReadMe động , nhiều chức năng như liên kết website , có hình ảnh … Với Custom Actions bạn có thể add bất cứ cái gì mà do bạn tự code ra, như : copy file sang thư mục nào đó , điều khiển GAC , Registry , IE , tạo database v.v… . Có thể nói là không giới hạn khả năng , vì chính do bạn tự tay code ra mà .

-          Để add custom action vào Setup Project . Click phải vào Setup Project trong Solution Explorer và chọn View->Custom Actions.

clip_image028

Hình  23 : Mở Custom Actions Editor

-          Sau đó sẽ có cửa sổ giống hình sau :  Custom Actions can be divided into 4 categories:

clip_image029

Hình  24 : Custom Action Editor

-          Custom Actions được chia làm 4 category sau : Install, Commit, Rollback, and Uninstall . Nếu bạn muốn có dialog ReadMe riêng bạn vào cuối quá trình cài đặt thì chọn Install

1.5. Launch condition s Editor

-          Dùng editor này , bạn có đặt điều kiện nào đó được kiểm tra phải có thì mới bắt đầu cài đặt ứng dụng được . Nếu người dùng cố gắng cài đặt ứng dụng vào máy của họ, mà không thỏa điều kiện đã xác định thì không thể cài đặt tiếp được  . Khi đặt điều kiện launch condition , bạn có thể chỉ rõ điều kiện  như kiểm tra sự tồn tại 1 file xác định , registry key nào đó , hay 1 component nào đó .Launch condition editor có 2 tùy chọn cho bạn dùng được minh họa như sau :

  • Search Target Machine: tùy chọn này cho phép bạn chỉ định cách search cái bạn cần trên máy client . Bao gồm như tìm fie , tìm registry key ….
  • Launch conditions : tùy chọn này cho phép bạn kiểm tra sự có mặt của ứng dụng cụ thể nào đó như IIS (Internet Information Server), .NET Framework …trên máy client .

clip_image031

Hình 25

Bảng sau liệt kê danh sách launch condition có thể bạn cấu hình thông qua  Launch conditions editor.

Condition

Purpose

File Launch

Dùng để tìm 1 file nào đó trên máy client

Registry Launch Installation

Tìm 1 key nào đó trên máy client

Windows Installer Launch

Tìm file Windows installer

.NET Framework Launch

Kiểm tra tồn máy client có .NET Framework hay không

Internet Information Services Launch

Kiểm tra  IIS

Bạn dùng Lauch Condition có tác dụng là kiểm tra một số điều kiên phải thỏa trước khi install ứng dụng .

Các điều kiện kiểm tra thường là tìm file , tìm khóa registry , tìm Component nào đó hay 1 điều kiện triển khai đặc biệt nào đó .

1.    Click phải vào Setup Project -> View -> Launch Condions . Cửa sổ Launch Conditions xuất hiện .

clip_image033

Hình  26

2.     Click chuột phải vào folder Searh Target Machine . Chọn một số giá trị sau :

a.      Add file Search

b.      Add Registry Search

c.      Add Windows Installer

3.    Click chuột phải vào Launch Conditions -> Add Launch Conditions .

Tìm thêm thông tin trong MSDN :

Deployment in Visual Studio

Launch Condition Management in Deployment

URL : ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_deploy/html/9927d5e4-11ab-4819-9c7d-7e5e9d3cf555.htm

1.5.1. Searching the system during the install

Trong Cửa sổ Launch Conditions có 2 categories : Search Target Machine và Launch Conditions . Thường trong Launch Condisions có sẵn 1 Launch Condition là .NET framework . Bạn thấy những thuộc tính của Launch Conditions .NET framework như hình sau :

clip_image034

Hình 27

Trong của sổ Properties bạn thấy các thuộc tính quan trọng sau  :

-          SupportedRuntimes : sẽ là con số miêu tả version của .NET Framework , mà ứng dụng của bạn  cần , dùng “;” để liệt kê nhiều version .NET Framework mà ứng dựng của bạn dùng

-          InstallUrl : là liên kết nơi framework có thể download về.

Khi máy client chạy file setup , điều đầu tiên nó sẽ kiểm tra có FrameWork được cài ở máy client chưa . Nếu không có , VS sẽ hỏi yes/no muốn cài đặt FrameWork từ đường link InstallUrl . Do đó bạn có thể cho thuộc tính InstallUrl là 1 đường dẫn tương đối từ CD hay thư mục nào cũng được .

1.5.2. Search for a file

Hình sau ví dụ cho tìm file notepad.exe trong thư mục hệ thống .

Chú ý dấu [System Folder] chỉ đến thư mục hệ thống (thư mục Windows nếu sài WinXP) của máy client . Có thuộc tính Properites có giá trị : FILEEXISTS1 , nghĩa là kiểm tra tồn tại hay không . Khi setup điều kiện Tìm file sẽ được dò tìm đúng tên file tại thư mục được chỉ định , Có thể điền thêm thông tin như Date , Version … để tìm chính xác file cần tìm . Thuộc tính Depth = 2 : tức là độ sâu tìm , thư mục cha là cấp 1 , thư mục con là cấp 2.

clip_image035

Hình 28

1.5.3. Search for a registry entry

Trong ví dụ này sẽ tìm khoá registry MDAC MDAC (Microsoft Data Access Components) ở máy client ,

RegKey : đường dẫn cần tìm

Value : giá trị cần tìm

clip_image036

Hình 29

1.5.4. Kiểm tra tồn tại .NET Framework trên máy client .

Chọn menu View -> Editor -> Launch condition s . Trong Launch condition s Editor, chọn  Requirements on Target Machine node và chọn  menu  Action -> Add .NET Framework Launch condition . Bây giờ bạn đã tạo  .NET Framework launch condition ,  khi người dùng có chạy chương trình cài đặt mà không có .NET Framework sẽ nhận được thông báo rằng  .NET Framework cần được cài đặt trước khi tiến trình cài đặt phần mềm .

-         C1 : Bạn cài đặt .NET Framework bằng thủ công trên máy client :

  • Bạn có thể download Dotnetfx.exe từ website Microsoft …
  • Client có thể tải Dotnetfx.ext băng tính năng Microsoft Windows Update
  • Bạn có thể tìm thấy Dotnetfx.exe trên đĩa cài đặt Microsoft Visual Studio .NET
  • Khi cài đặt , chương trình cài đặt sẽ kiểm tra máy client có NetFramework không , nếu không có thì nó sẽ hiện ra thông báo (H13):

clip_image038

Hình  30

Nếu nhấn No thì thoát khỏi trình cài đặt

Nếu nhấn Yes thì trình sẽ tự động tới trang web down NetFramework tương ứng.

-         C2 : Click chuột phải vào Setup Project->chọn Properties->nhấn nút Prerequisites…

clip_image040

Hình 31

Hiện lên dialog Prerequisites .  Bạn đánh dấu check vào phần .Net FrameWord 2.0

clip_image042

Hình 32

-         Ở dialog này bạn check vào các component (VD : .Net Framework 2.0) , khi đó lúc setup phần mềm Windows Installer sẽ kiểm tra các component đó có được cài sẵn vào máy client , nếu có thì cho cài tiếp còn ngược lại không có thì sẽ cài . Mà các component sẽ được lấy ra từ nơi mà bạn chỉ định ở các option bên dưới của dialog Prerequisites

o   Download Prerequisites from the component vendor’s web site : chỉ định component được install từ website của nhà sản xuất . Đây là tuỳ chọn mặc định .

o   Download Prerequisites from the same location as my application : chỉ định component được setup từ thư mục của ứng dụng . Do đó khi chọn tuỳ chọn này , nó sẽ copy các gói component cần thiết từ máy chủ vào output của Setup Project

o   Download Prerequisites from the following location. : chỉ định  component  được install từ thưc mục do bạn tự chọn . Nhấn nút Browse vào thư mục cài đặt .

-         C3 : Bạn có thể tạo một bootstrapper setup để cài đặt .NET Framework và rồi cài đặt ứng dụng một cách tự động . Cách này làm cho việc triển khai thêm rắc rối và không mang lại lợi ích nào thuyết phục trong hầu hết các trường hợp.

1.6.      User Interface Editor

Nhìn cái tên là bạn đoán ra editor này cho phép bạn tùy biến một dãy các hộp thoại GUI được hiển thị trong suốt quá trình cài đặt ứng dụng trên máy client .

clip_image043

Hình  33

Hình ở trên minh họa cho User Interface Editor bao gồm 2 chế độ cài đặt :

  • Install: vùng Iinstall liệt kê các hộp thoại sẽ xuất hiện khi người dùng chạy installer.
  • Administrative Install: vùng này liệt kê các hộp thoại sẽ được xuất hiện khi người quản trị hệ thống uploads installer lên mạng .

Hộp thoại được định nghĩa sẵn trong vùng Install và Admin được chia thành 3 Group Dialog nữa :

  • Start dialog boxes: Các hộp thoại trong lớp này sẽ xuất hiện trước khi quá trình thực sự cài đặt bắt đầu .
  • Progress dialog box: Các hộp thoại trong lớp này cho phép người dùng tương tác lại trong quá trình cài đặt .
  • Finish dialog boxes: Các hộp thoại trong lớp này sẽ xuất hiện khi quá trình cài đặt thành công .  Nó cũng thể cho phép ngừoi dùng chạy ứng dụng khi cài đặt xong .

-          Thực ra rất dễ sắp xếp lại các hộp thoại GUI bằng cách dragging and dropping chúng tới vị trí thích hợp .

-         Bạn có thể tùy chỉnh các thông tin ,  tiêu đề của các cửa sổ xuất hiện trong lúc install phần mềm .

Click chuột phải vào Setup Project->View->User Interface . Sẽ xuất hiện của sổ User Interface :

clip_image044

Hình  34

-         Chọn từng hộp thoại và chỉnh sửa các thông tin trong cửa sổ Properties (nếu không có của sổ này thì vào menu View->Properties Window hoặc nhấn F4) . Bạn có thể thêm một Dialog của mình , bằng cánh nhấn vào Group Dialog->Add Dialog .

1.6.1       Thêm hộp thoại  Splash vào trong quá trình cài đặt .

-          Bằng cách dùng User Interface Editor, bạn có thể insert thêm 1 hộp thoại phụ vào chuỗi các hộp thoại trên , bằng cách chọn hộp thoại Start từ  user interface editor và chọn menu  Action->Add Dialog . Trong cửa sổ  Add Dialog ,  chọn hộp thoại  Splash trong danh sách . Khi hộp hoại  Splash được thêm vào user interface editor, bạn có thể drag and drop hộp thoại để sắp xếp vị trí thích hợp .Vì hộp thoại  Splash luôn luôn xuất hiện vào lúc bắt đầu cài đặt , nên ta di chuyển hộp thoại Splash vào đầu dãy hộp thoại . Trong hộp thoại splash , bạn có thể thêm hình ảnh hiển thị bằng cách Click phải chuột vào nó chọn Properties. Trong cửa sổ  Properties ,đặt thuộc tính  SplashBitMap đường dẫn của hình mà bạn muốn . Giống như hộp thoại Splash , có một số hộp thoại định nghĩa sẵn như  License Agreement, Read Me, Register User, Customer Information và v.v… Hình sau đâu mình họa một số tùy chọn hộp thoại trong Add Dialog box.

clip_image045

Hình  35

1.  Add Merge Module

Khai báo các Merge Module cho trình cài đặt: trên Solution Explorer, nhấn phải chuột trên project cài đặt -> Add -> Merge Module. Nếu trong ứng dụng có sử dụng các thành phần không có trong .Net FrameWork, phải chọn và đưa vào trình cài đặt.

- Ví dụ ứng dụng có báo biểu Crystal Report là chương trình độc lập với .Net FrameWork, cần phải đưa các Merge Module sau vào trình cài đặt:

a. Crystal_managed2003.msm

b. Crystal_Database_Access2003.msm

c. Crystal_Database_Access2003_enu.msm

d. Crystal_regwiz2003.msm

clip_image046

Hình  36

Khai báo License key: với một số Merge Module, phải khai báo License Key ví dụ Crystal_regwiz2003.msm theo các bước:

a. Trên Solution Explorer, chọn Merge Module muốn khai báo License key và nhấn phím F4 để mở cửa sổ Properties :

clip_image047

Hình  37

Trên cửa sổ Properties, nhấn vào biểu tượng dấu cộng < ![endif]–>clip_image048, nhập License Key

clip_image049

License Key lấy bằng cách vào Menu Help->About Microsoft Visual Studio

clip_image051

Hình  39

< ![endif]–>clip_image052 : Lưu ý : bạn có thể add Crystal Report bằng Prerequisites ở mục 14( Cài đặt NET. Frameword trên máy client)

2.  Cấu hình các thuộc tính của Setup Project

Trước khi Build Setup Project, cần xác định Propreties cho Setup Project: Right Click vào Setup Project trong Solution Explorer, chọn Project Propertities  :

clip_image053

Hình  40

Output file name : Xác định vị trí lưu file Windows Installer (.Msi , .Msm ) . Mặc định được lưu ở . Bạn có thể nhấn nút (…) để chọn vị trí đường dẫn khác .

Packages file : Loại đóng gói , chọn một trong các các giá trị sau :

As loose uncompressed files

Các file được đưa vào trong 1 file là file .MSI

In setup file

Các file được nén thành 1 file .MSI (mặc định) .

In cabinet file(s)

Các file được nén thành 1 hay nhiều file .Cab .

Compression : chỉ định cách nén file setup , có 3 tùy chọn , không có tác dụng đối với tùy chọn As loose uncompressed files ở mục Packages file

Optimized for speed

Các file được nén để install nhanh hơn , nhưng kích thước file setup sẽ lớn

Files will be compressed to install faster, but will result in a larger file size.

Optimize for size

Các file sẽ được nén thành file setup có kích thước nhỏ , nhưng install chậm hơn

None

Các file không được nén.

Cab size : Chỉ định kích thước lớn nhất cho file .Cab . Tùy chọn này chỉ các tác dụng khi ở mục Package files được chọn In cabinet file(s) . Có 2 tùy chọn chính ở múc này

Option

Description

Unlimited

Tạo 1 file .Cab duy nhất .

Custom

Tạo 1 hay hay nhiều file .Cab , mỗi file .Cab có kích thước lớn nhất được chỉ định ở textbox Custom.

3.  Các thông tin cấu hình Setup Project ở cửa sổ Properties.

Trong cửa sổ Solution Exlorer , chọn Project Setup , trong cửa sổ Properties (nếu không có của sổ này thì vào menu View->Properties Window hoặc nhấn F4) sẽ hiện lên danh sách các thông tin mà ta có thể cấu hình cho file setup chương trình của mình .

Hầu hết các thông tin thiết lập này đều là mô tả được sử dụng trong Setup Wizard hay trong cửa sổ Add/Remove Programs.

Tên thuộc tính

Ý nghĩa

AddRemoveProgramsIcon

Chỉ định icon xuất hiện trong hộp thoại Add/Remove Programs

Author

Tên tác giả của chương trình

Description

Miêu tả một số thông tin phụ

DectectNewerInstalledVersion

Lúc cài đặt có kiểm tra phiên bản mới hơn không , mặc định là True

InstallAllUsers

Chương trình cài đặt có được phép sử dụng bởi tất cả user có trong máy không . Mặc định là False

Keywords

Chỉ định một số từ khóa để tìm kiếm chương trình

Localization

Xác định vùng văn hóa của chương trình

Manufacturer

Tên của nhà sản xuất

ManufacturerUrl

Địa chỉ Website của nhà sản xuất

PostBuildEvent

 

PreBuildEvent

 

ProductCode

Số sản phẩm  , số này là duy nhất , mặc định VS tạo sẵn cho mình , số này định danh cho phần mềm của mình là duy nhất trên máy cài đặt

ProductName

Tên sản phẩm, thường tên xuất hiện trong add/remove program trong
control panle

RemovePreviousVersions

Chỉ định có xóa phiên bản cũ trước khi cài đặt phiên bản mới hay không.
Mặc định là False

RunPostBuildEvent

Chỉ định các lệnh PostBuildEvent chạy khi này .
Mặc định là On succesful build , tức là khi cài đặt xong rồi thì lệnh đó mới
chạy .

SearchPath

 

SupportPhone

Chỉ định số điện thoại để hỗ trợ về sản phẩm

SupportUrl

Chỉ định địa chỉ trang web để hỗ trợ về sản phẩm

TargetPlatform

Chỉ định Nền máy đích là gì . Mặc định là x86 (tức là ứng dụng win32 bit)

Title

Chỉ định tiêu đề , tiêu đề này xuất hiện trong cửa sổ cài đặt

UpgradeCode

Chỉ định một số duy nhất , đại diện cho nhiều version của ứng dụng.
Mặc định dãy số này do VS tạo ra

Version

phiên bản của ứng dụng . VD 1.0.0

   
   

3.1. Deploy IIS Settings

Một điều quan trọng khi bạn triển khai ứng dụng web ASP.NET là làm thế nào cấu hình một số thông số trong IIS  .

Nếu chọn cách triển khai ứng web bằng cách copy như lệnh XCOPY , Windows Explorer, hay FTP ,  thì không thể cấu hình thông số của  IIS được . Bạn phải cấu hình cài đặt 1 cách độc lập . Bạn có thể vừa làm cách thủ công hay viết  IIS scripts để áp dụng cài đặt vào thư mục Web.

Nếu bạn dùng Visual Studio .NET Copy Project , 1 virtual directory mới được tạo tự động cho bạn trên Web server. Tuy nhiên , thông số IIS settings sẽ là thông số mặc định của máy chủ web . Trở lại vấn đề, bạn có thể cấu hình thông số  IIS một cách độc lậo . Nếu gói ứng dụng  ASP.NET của bạn trong Windows installer Web setup project, bạn có thể chỉ định các thông số IIS .

Để cấu hình các thông số cho virtual directory , chọn thư mục ứng dụng Web File System Editor. Chọn Properties . Được minh họa như hình sau :

clip_image054

Hình  41

Một só thuộc tính quan trọng sau đây :

  • AllowDirectoryBrowsing: thuộc tính này cho phép bạn cấu hình dùng trình duyệt thư mục  Web . Thuộc tính này tương được với checkbox  Directory browsing trên tab  Directory trong hộp thoại Internet Information Services Web Site Properties . Có thể đặt True hoặc False.
  • AllowReadAccess: Thuộc tính này tương được với checkbox  Read trên tab  Directory trong hộp thoại Internet Information Services Web Site Properties . Có thể đặt True hoặc False.
  • AllowScriptSourceAccess: Thuộc tính này tương được với checkbox  Scipt Source Access trên tab  Directory trong hộp thoại Internet Information Services Web Site Properties . Có thể đặt True hoặc False.
  • AllowWriteAccess: Thuộc tính này tương được với checkbox  Write trên tab  Directory trong hộp thoại Internet Information Services Web Site Properties . Có thể đặt True hoặc False.
  • ApplicationProtection: Thuộc tính này tương được với combobox  Application Protection trên tab  Directory trong hộp thoại Internet Information Services Web Site Properties . Có thể đặt giá trị là  vsdapLow, vsdapMedium, hay vsdapHigh.
  • AppMappings: Thuộc tính này tương được với textbox Local Path trên tab  Directory trong hộp thoại Internet Information Services Web Site Properties . Để chỉ tới đường dẫn tới thư mục web thật của bạn .

3.1.1. Specifying additional IIS Propeties

Có một số thông số của  IIS không thể cấu hình với thuộc tính của Web setup project. Bao gồm các thông số bảo mật ( anonymous access, basic authentication,  hay Windows authentication) và thông số về cấu hình lỗi .Tuy nhiên , bạn có thể khác phục vấn đề này bằng cách khác . Đó là  bao gộp custom action s vào file  Windows installer . Như đã đề cập trước đây  , dùng custom action , bạn có thể chạy code vào lúc cuối của quá trình cài đặt trên máy client để thao tác một số hành động phức tạp . Code có thể định dạng trong file  DLL, file thực thi , script, hay assembly. Các custom action s cần được cấu hình bằng cách Custom action Editor thông qua menu View -> Editor -> Custom action .

4.  Build

-         Bước cuối cùng tất nhiên mà bạn phải làm là build Setup Project khi mà các bước cấu hình ở các bước trên đã hoàn thành .

o   C1 : Click chuột phải vào Setup Project chọn Build , hoặc Rebuild

o   C2 : Nhấn nút Build clip_image055 , nhớ trong Solution Explorer ta phải chọn tên của Setup Project.

o   C3 : Vào Menu Build->Chọn Build Tên_Setup_Project

-         Nếu sau khi build mà thích cài thử thì cứ việc right click vào Setup Project->chọn Install.

clip_image056

Hình  42

-         Phần để cài đặt chứa trong thư mục Debug của trình cài đặt gồm các tập tin:

http://i329.photobucket.com/albums/l370/debuggervnn/donggoivs2005/37.jpg

Hình  43

-         Tập tin Config.ini chứa các hằng thông báo lỗi, có thể thay đổi nội dung để thông báo dễ hiểu hơn.

Chú ý: cần có .Net Framework ở máy Client . Có thể gộp luôn cả .Net Frameword vào gói Setup  rồi tự động Install tự động. Xem thêm mục .

5.  Ưu điểm

-          Nhanh , dễ dàng cài đặt , có giao diện GUI , không phải viết mã kịch bản cài đặt .

-          Gọn nhẹ , đơn giản , được tích hợp sẵn trong bộ Visual Studio

-          Chức năng tự repair , nếu một file bin nào bị xoá thì khi chạy chương trình dialog repair tự động hiện lên và bổ sung file bị thiếu .

-          Khi bạn cài đặt 1 ứng dụng , toàn bộ thông tin về ứng dụng được ghi vào 1 record trong Windows installer database . Khi uninstall ứng dụng , database sẽ kiểm tra đảm bảo rằng không ứng dụng nào dính dáng tới các thành phần của ứng dụng đang uninstall , bằng cách ấy sẽ giải quyết được vấn đề nhức đầu DLL hell

-          Nếu có lỗi trong quá trình cài đặt , thì có chức năng tự động  xóa bỏ sạch sẽ các file được copy vào máy của client.

6.  Khuyết điểm

-         Chỉ hỗ trợ các chương trình được viết bởi ngôn ngữ trong họ .NET

-         Không có chức năng kiểm tra  phần mềm nào đó đã cài tại máy client hay chưa.

7.  Kết luận

Mặc dù , bài viết này không nêu được tất cả các kỹ thuật của VS.NET trong việc tạo file setup . Nhưng người viết mong bài viết này cung cấp được các vấn đề cơ bản để tạo ra file setup cho các bạn muốn triển khai sản phẩm của mình ra cộng đồng  một cách chuyên nghiệp . Mọi vấn đề gì cần tham khảo có thể xin liên lạc qua địa chỉ email : mr.dangthanhtung@gmail.com . Happy Programming !

6 Responses to “Đóng gói và triển khai ứng dụng trong VS2005”

  1. MeoCon_HamChoi said

    chao thay a.
    Thay co the lam 1 demo co ban dong goi ung dung bang tool installshield duoc khong a
    Yeu cau nhu sau:
    cho phep nguoi dung tuy chon cai dat : 1.SQL
    2.Framework
    3.kiem tra may client co du 1,2 hay chua
    cam on thay nhieu !

  2. Trương Đông said

    chào anh Hải,
    Em sử dụn visual 2k5 để đóng goi chương trình. Làm được phần kiểm tra hệ thống đã cài đặt .Net Framework, nếu chưa thì cho chạy file cài đặt .Net Framework. Thế nhưng sau khi cài đặt .Net Framework thì nó không chạy file setup để cài đặt chương trình.
    Vậy phải làm thế nào đây anh??? Có giải pháp nào không?

    Cảm ơn anh Hải.

  3. Võ Văn Hải said

    Bạn nào giúp mình với. Mình bận quá. Chưa nghiên cứu được.

  4. thầy ơi,cho em hỏi: khi ở formLogin làm sao để điều khiển các button của form khác,nghĩa là làm ẩn(khi đăng nhập sai) và hiện(khi đăng nhập đúng)
    và thấy ơi, code kiểm tra số điện thoại trong c# như thế nào (phải đúng,VD:09012……) vậy thầy

  5. trung said

    thầy ơi ,cho em hỏi..chỗ setup project, khi em làm tới bước add->project uotput…hiện ra bảng chọn primary uotput…sao VS của em không thấy 1 project nào trong , bảng trống rỗng, em không thấy primary uotput

  6. Võ Văn Hải said

    Bạn xem thử bản VS của bạn là bản gì?
    Các bước tiến hành có đúng không?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

Join 2,193 other followers

%d bloggers like this: