Làm cách nào để xóa dấu ngoặc kép trong chuỗi bằng PHP?

Function which checks if $input has correct slashes,
otherwise adds slashes. For cases when you are not sure the input is not already addslashed.

    public function addslashes_once[$input]{
        //These characters are single quote ['], double quote ["], backslash [\] and NUL [the NULL byte].
        $pattern = array["\\'", "\\\"", "\\\\", "\\0"];
        $replace = array["", "", "", ""];
        if[preg_match["/[\\\\'\"\\0]/", str_replace[$pattern, $replace, $input]]]{
            return addslashes[$input];
        }
        else{
            return $input;
        }
    }

Trong bài viết này, chúng tôi sẽ thảo luận về cách loại bỏ dấu ngoặc kép của mảng trong php. chúng ta có thể loại bỏ dấu ngoặc kép của mảng bằng cách sử dụng hàm str_replace[]. chức năng này là kiểm tra xem làm thế nào để loại bỏ dấu ngoặc kép mảng trong php

Có ví dụ để kiểm tra xem làm thế nào để loại bỏ dấu ngoặc kép mảng trong php. trong ví dụ này, chúng ta sẽ sử dụng hàm json_encode[], rtrim[] và str_replace[] để kiểm tra xem làm thế nào để loại bỏ các dấu nháy kép của mảng trong php. Vì vậy, hãy xem ví dụ sau với đầu ra

Sử dụng cách trên trên các chuỗi nhiều dòng cũng sẽ hoạt động, nhưng xin lưu ý rằng nó cũng sẽ cắt bất kỳ khoảng trắng nội bộ nào ở cuối/đầu, như GuruM đã nhận thấy trong các nhận xét

string='    wordAA
    >four spaces before<
 >one space before<    '
echo "$string" | sed -e 's/^[ \t]*//' | sed -e 's/[ \t]*$//'

đầu ra

wordAA
>four spaces before<
>one space before<

Vì vậy, nếu bạn muốn giữ những khoảng trắng đó, vui lòng sử dụng chức năng ở đầu câu trả lời của tôi

d] GIẢI THÍCH cú pháp sed "tìm và thay thế" trên các chuỗi nhiều dòng được sử dụng bên trong hàm trim

Câu hỏi thường gặp về thiết lập Inno chứa thông tin bổ sung không có trong tài liệu

Nội dung của trang này cũng có sẵn trên GitHub nơi bạn có thể đề xuất các mục mới hoặc các cải tiến khác bằng nút Chỉnh sửa

chức năng

Các vấn đề

Nhiệm vụ cài đặt

khả năng tương thích

Điều khoản khác

chức năng

Dịch văn bản của Inno Setup

Dịch văn bản của Inno Setup sang ngôn ngữ khác không yêu cầu sửa đổi mã nguồn. Chỉ cần tạo một bản sao của Mặc định. isl [đi kèm với Inno Setup] và bắt đầu chỉnh sửa văn bản trong đó. [Không sửa trực tiếp Default. isl, nếu không các thay đổi của bạn sẽ bị mất khi bạn cài đặt phiên bản Inno Setup mới. ] Xem chủ đề "Phần [Tin nhắn]" trong tài liệu để biết một số mẹo quan trọng

Khi bạn đã hoàn thành việc tạo mới. isl, hãy tạo phần [Ngôn ngữ] để yêu cầu trình biên dịch sử dụng nó

[Ngôn ngữ]
Tên. mytrans; . "trình biên dịch. Bản dịch của tôi. là"

Có nhiều bản dịch được đóng góp để tải xuống trên trang Bản dịch cài đặt Inno

Lưu ý rằng không thể dịch chú thích của các nút trong hộp tin nhắn. Những chú thích này luôn ở cùng ngôn ngữ với chính Windows. Vì vậy, nếu người dùng đang chạy phiên bản Windows tiếng Anh, họ sẽ thấy chú thích nút tiếng Anh. Đây là hành vi bình thường đối với bất kỳ ứng dụng nào hiển thị hộp thông báo bằng hàm Windows MessageBox[]

Nó có hỗ trợ MBCS [bộ ký tự nhiều byte] không?

Đúng. Nó thực hiện kiểm tra byte dẫn đầu trên tất cả tên tệp và phân tích cú pháp hằng số, do đó, nó không nhầm byte ở cuối với dấu gạch chéo ngược ["\"] hoặc dấu ngoặc nhọn ["{"]

Nó có hỗ trợ Windows Installer trong tương lai không?

Tại thời điểm hiện tại, không có kế hoạch cho phiên bản Windows Installer của Inno Setup. Trình cài đặt Windows "Hỗ trợ" có thể liên quan đến việc viết lại gần như hoàn chỉnh chương trình

Làm cách nào để thay đổi biểu tượng của Cài đặt. người cũ?

Có thể thay đổi biểu tượng của trình cài đặt bằng cách đặt chỉ thị phần SetupIconFile [Setup]. Để đặt biểu tượng của trình gỡ cài đặt, hãy đặt UninstallDisplayIcon

Inno Setup có thể thực hiện cài đặt có điều kiện không - ví dụ: chỉ tiến hành nếu có tệp hoặc khóa đăng ký nhất định?

Có, thông qua tính năng Pascal Scripting

Có tính năng tải xuống không?

Có, thông qua tính năng Pascal Scripting. Xem CodeDownloadFiles. tập lệnh ví dụ iss cho một ví dụ

Có thể thực hiện cài đặt im lặng mà không cần sử dụng tham số dòng lệnh /SILENT hoặc /VERYSILENT không?

Không, một tính năng như vậy cũng không được lên kế hoạch [nó sẽ bị lạm dụng]. Nếu bạn có ý định giữ tương tác người dùng ở mức tối thiểu, hãy sử dụng các chỉ thị của phần Tắt* [Thiết lập]

Thiết lập có thể sử dụng giá trị của mục đăng ký làm tên thư mục mặc định không?

Đúng. Sử dụng một {reg. } hằng số trong DefaultDirName. Ví dụ

[Thiết lập]
DefaultDirName={reg. HKA\Phần mềm\Chương trình của tôi, Đường dẫn. {autopf}\Chương trình của tôi}

Xem chủ đề Hằng số trong tài liệu để biết thêm thông tin về {reg. } hằng số và hằng số {autopf}

Ngoài ra, hãy xem chủ đề Chế độ cài đặt phi quản trị trong tài liệu để biết chi tiết về giá trị khóa HKA

Có thể xóa các khóa bên trong tổ hợp đăng ký HKEY_CURRENT_USER của mọi người dùng không?

Không. Không có phương pháp hoàn hảo nào để truy cập các khóa đăng ký thuộc về người dùng khác

Để truy cập trung tâm đăng ký của một người dùng nhất định, trước tiên hồ sơ của người dùng phải được tải và để thực hiện điều đó, cần phải xác thực. Trình gỡ cài đặt sẽ không biết mật khẩu của người dùng

"Nhưng nó không thể gọi RegLoadKey để gắn tổ ong đăng ký của người dùng theo cách thủ công [NTUSER. DAT]?" Nếu không mạo danh người dùng, người dùng đang chạy trình gỡ cài đặt sẽ cần có quyền ghi trên thư mục hồ sơ của người dùng. Trên Windows XP, hồ sơ người dùng có thể được đánh dấu là "riêng tư", trong đó không ai ngoài chính người dùng có thể truy cập các tệp bên trong nó

Và trong thiết lập hồ sơ chuyển vùng, thậm chí không thể biết đường dẫn mà hồ sơ của một người dùng nhất định cư trú mà không xác thực trước

Để đối phó với tình huống này, hãy làm những gì những người cài đặt khác làm. chỉ cần để các khóa HKCU của người dùng khác tại chỗ

Tôi phải triển khai những tệp hệ thống nào với ứng dụng của mình?

Điều này chủ yếu phụ thuộc vào công cụ phát triển mà ứng dụng của bạn được tạo bằng. Kiểm tra tài liệu của nó

Nếu bạn xác định rằng ứng dụng của mình phụ thuộc vào một Microsoft DLL cụ thể không được cài đặt sẵn trong Windows thì trước hết, không triển khai DLL ra khỏi thư mục Windows của riêng bạn. Các tệp trong thư mục Windows của riêng bạn thường được tùy chỉnh cho phiên bản Windows cụ thể của bạn và sẽ không hoạt động trên các phiên bản Windows khác -- hoặc tệ hơn [xem bên dưới]. Điều này đặc biệt đúng khi bạn đang chạy phiên bản Windows mới nhất

Thay vào đó, hãy tìm kiếm các phiên bản DLL trên trang web của Microsoft được coi là "có thể phân phối lại". [http. //www. Microsoft. com/downloads/ là một nơi tốt để bắt đầu. ] Các phiên bản như vậy thường an toàn để cài đặt trên bất kỳ phiên bản Windows nào [nhưng hãy kiểm tra các tệp README để chắc chắn]

Nếu không có gì xuất hiện, thì có lẽ bạn không được phép triển khai riêng lẻ DLL được đề cập

Làm cách nào để tạo bản cài đặt là "bản cập nhật" hoặc "tiện ích bổ sung" cho bản cài đặt hiện có?

Khi triển khai cài đặt là "bản cập nhật" [hoặc "tiện ích bổ sung"] cho cài đặt hiện có, bạn có thể muốn đáp ứng các tiêu chí sau

  1. Bản cập nhật phải được cài đặt vào cùng thư mục với ứng dụng gốc
  2. Mọi tệp mới được cài đặt bởi bản cập nhật phải được xóa khi gỡ cài đặt ứng dụng gốc
  3. Bản cập nhật không được tạo mục nhập mới trong danh sách Thêm/Xóa Chương trình hoặc thay đổi mục nhập của ứng dụng gốc. Tên ứng dụng được trình gỡ cài đặt hiển thị cũng không thay đổi

1 và 2 có thể đạt được bằng cách cung cấp cho bản cài đặt bản cập nhật của bạn cài đặt AppId giống như ứng dụng gốc. [Nếu bạn chưa bao giờ đặt AppId trong ứng dụng gốc, thì hãy đặt AppId thành giá trị của AppName được sử dụng trong ứng dụng gốc. ] Điều này, khi được kết hợp với UsePreviousAppDir=yes [cài đặt mặc định], sẽ khiến cài đặt bản cập nhật mặc định ở cùng thư mục với ứng dụng gốc và chia sẻ cùng một tệp nhật ký gỡ cài đặt [unins???. dat]. Ngoài ra, hãy xem chủ đề Ứng dụng tương tự trong tài liệu để biết chi tiết

3 có thể đạt được bằng cách đặt CreateUninstallRegKey=no và UpdateUninstallLogAppName=no

Các vấn đề

Trình biên dịch cho biết "Các trích dẫn không khớp hoặc đặt sai vị trí trên tham số"

Thông báo này thường hiển thị nếu bạn cố gắng nhúng ký tự trích dẫn ["] vào dữ liệu của tham số, nhưng không nhân đôi ký tự đó theo yêu cầu. Đọc chủ đề "Tham số trong phần" trong tài liệu để biết thêm thông tin

Ứng dụng của tôi không thể tìm thấy bất kỳ tệp nào của nó khi được khởi động từ lối tắt được tạo bởi Thiết lập. Nó hoạt động tốt khi tôi nhấp đúp vào EXE của ứng dụng trong Explorer

Ứng dụng của bạn rất có thể không chỉ định tên đường dẫn trên các tệp mà nó đang cố mở, do đó, nó sẽ tìm thấy chúng trong thư mục hiện tại. Cài đặt Inno theo mặc định không đặt trường "Bắt đầu vào" trên các phím tắt mà nó tạo ra;

Trong hầu hết các trường hợp, đây là điều cần được sửa ở cấp ứng dụng. Các ứng dụng GUI được thiết kế phù hợp sẽ không được khởi động từ một thư mục cụ thể; . Ví dụ, trong Delphi hoặc C++ Builder, có thể lấy tên đường dẫn đầy đủ của thư mục chứa ứng dụng EXE bằng cách gọi. ExtractFilePath[ParamStr[0]]. Để có được đường dẫn đầy đủ của tệp có tên "Tệp. txt" trong thư mục ứng dụng, hãy sử dụng. ExtractFilePath[ParamStr[0]] + 'Tệp. txt'

Nếu vì lý do nào đó mà bạn không thể sửa lỗi này ở cấp ứng dụng, bạn có thể yêu cầu Inno Setup đặt trường "Bắt đầu vào" bằng cách thêm "WorkingDir. {app}" vào các mục [Biểu tượng] của bạn

Tại sao thông báo lỗi "Tệp cài đặt bị hỏng" hiển thị trên một số hệ thống?

Thông báo lỗi này được hiển thị khi một tệp liên quan đến cài đặt [e. g. , cài đặt. exe, thiết lập. 1] có kích thước sai hoặc một phần của tệp không kiểm tra CRC. Nó không được hiển thị vì bất kỳ lý do nào khác

Nếu cài đặt của bạn được phân phối qua internet và bạn nhận được nhiều báo cáo về lỗi này, thì có thể máy chủ web của bạn đang phân phối một phần tệp bằng cách hủy kết nối sớm. Yêu cầu những người dùng bị ảnh hưởng kiểm tra kích thước theo byte của [các] tệp mà họ đã tải xuống

Nếu bản cài đặt của bạn được phân phối qua CD-ROM hoặc đĩa mềm, có thể đĩa CD-ROM hoặc đĩa mềm bị hỏng hoặc có thể ổ đĩa bị lỗi

Khi tôi cài đặt phiên bản mới của ứng dụng mà không gỡ cài đặt phiên bản cũ trước, tôi nhận được mục nhập thứ hai trong Add/Remove Programs của Control Panel

Điều này xảy ra khi bạn thay đổi AppId giữa các phiên bản hoặc nếu AppId không được chỉ định, AppName. Nếu bạn làm như vậy, Thiết lập không có cách nào để biết rằng hai phiên bản là của cùng một ứng dụng và do đó sẽ tạo một mục mới trong Thêm/Xóa Chương trình. Ngoài ra, một tệp nhật ký gỡ cài đặt mới [unins???. dat] sẽ được tạo. Giải pháp rõ ràng cho việc này là không thay đổi AppId hoặc AppName

Nếu bạn phải thay đổi AppName trong phiên bản mới, hãy đặt AppId thành giá trị của AppId hoặc AppName từ phiên bản trước

Thiết lập đưa ra thông báo "Không thể đăng ký DLL/OCX. Không tìm thấy xuất DllRegisterServer"

Thông báo này thường có nghĩa là bạn đã chỉ định cờ "máy chủ đăng ký" trên một tệp không có khả năng được đăng ký. Xóa cờ "máy chủ đăng ký" khỏi mục nhập [Tệp] và thông báo sẽ biến mất

Sau khi gỡ cài đặt, các thư mục được tạo trong quá trình cài đặt vẫn tồn tại

Có một số lý do tại sao một thư mục có thể không được gỡ bỏ

  • Nó đã tồn tại trước khi cài đặt. Theo mặc định, trình gỡ cài đặt an toàn và không xóa các thư mục mà trình cài đặt không tạo ra
  • Nó chứa các tập tin hoặc thư mục con. Sử dụng [UninstallDelete] nếu bạn cần trình gỡ cài đặt để xóa các tệp/thư mục bổ sung
  • Một tiến trình đang chạy có thư mục là thư mục hiện hành của nó

Tôi chạy một tệp bó trong phần [Chạy], nhưng cửa sổ vẫn còn trên màn hình sau khi thực thi xong. Tôi muốn nó "đóng khi thoát. "

Từ Tim Rude.
Cách đơn giản nhất để tự động đóng một tệp bó khi thoát là xóa màn hình ở cuối tệp bằng cách sử dụng lệnh CLS.

--- tập tin lô 1 ---

@echo tắt
echo Hello World
echo Tệp lô này KHÔNG đóng khi thoát

--- tập tin lô 2 ---

@echo off
echo Hello World
echo Tệp lô này KHÔNG đóng khi thoát
cls

Tôi đã thay đổi DefaultDirName trong tập lệnh của mình, nhưng khi tôi chạy Thiết lập, nó sẽ mặc định là thư mục tôi đã có trước đó

Khi khởi động, Thiết lập tìm trong sổ đăng ký để xem ứng dụng tương tự đã được cài đặt trước đó chưa và nếu có, nó sẽ sử dụng thư mục cài đặt trước đó làm thư mục mặc định được hiển thị cho người dùng trong trình hướng dẫn. Nếu bạn gỡ cài đặt ứng dụng và chạy lại Thiết lập, nó sẽ sử dụng cài đặt DefaultDirName mới. Nếu bạn muốn tắt tính năng này, hãy đặt UsePreviousAppDir thành "no"

Tôi có hai mục [Biểu tượng] có cùng Tên, nhưng chỉ một trong số chúng được cài đặt

Hai tệp không thể có cùng tên và vì lối tắt là tệp nên hai lối tắt không thể có cùng tên

Thiết lập không đợi chương trình được thực thi bởi mục [Run] kết thúc

Trước tiên, đảm bảo rằng bạn không sử dụng cờ "nowait" hoặc "waituntilile" trên mục nhập [Run]. Các cờ này ngăn Thiết lập đợi cho đến khi quá trình kết thúc hoàn toàn

Nếu bạn không sử dụng các cờ đó và dường như nó vẫn không đợi chương trình kết thúc, thì có khả năng điều đang xảy ra là EXE bạn đang chạy đang sinh ra một số quy trình khác và sau đó tự chấm dứt ngay lập tức, gây ra Thiết lập . Điều này được biết là xảy ra với các trình cài đặt dựa trên InstallShield cũ hơn [để giải quyết vấn đề này, hãy thử sử dụng khóa chuyển /SMS]

Một cách đơn giản để kiểm tra xem một chương trình có thực hiện điều đó hay không là chạy "START /WAIT ProgramName. exe" từ dòng lệnh và xem liệu bạn có được đưa trở lại dấu nhắc lệnh trước khi chương trình thoát không

Một số ngôn ngữ bị thiếu trong hộp thoại Chọn ngôn ngữ thiết lập hoặc hoàn toàn không hiển thị mặc dù tôi đã thêm nhiều ngôn ngữ

Bạn đang sử dụng phiên bản cũ Không phải Unicode của Cài đặt Inno

Ổ đĩa được ánh xạ không hiển thị trên trang thuật sĩ Chọn Vị trí Đích hoặc không thể duyệt vào

Cài đặt của bạn yêu cầu quyền quản trị và đang chạy nâng cao

Ổ đĩa được ánh xạ không khả dụng [theo mặc định] cho bất kỳ ứng dụng nâng cao nào. Điều này đã được giới thiệu trong Windows Vista

Có một tùy chọn để cung cấp chúng cho cùng một độ cao người dùng, nhưng điều này sẽ không giúp ích gì khi chạy từ LUA nơi người dùng thay đổi

Quá trình cài đặt của tôi cần thực hiện một số thứ mà Inno Setup dường như không có tính năng dành cho

Sử dụng tính năng Pascal Scripting hoặc phần [Run]

Phần [Run] là một phương pháp đơn giản nhưng thường bị bỏ qua để thực hiện các tác vụ cài đặt tùy chỉnh. Trước tiên, hãy viết một chương trình nhỏ trong công cụ phát triển mà bạn chọn [tốt nhất là chương trình tạo EXE độc lập, chẳng hạn như Delphi] để thực hiện tác vụ mong muốn và sao chép EXE của nó vào thư mục tập lệnh của bạn. Tiếp theo, đặt một mục trong phần tập lệnh [Tệp] yêu cầu Thiết lập sao chép EXE vào thư mục tạm thời của cài đặt ["{tmp}"]

[Tệp]
Nguồn. "Sửa đổi Autoexec. exe"; DestDir. "{tmp}"

Sau đó, thêm mục [Chạy], yêu cầu Thiết lập thực thi EXE sau tất cả các bước cài đặt khác

[Run]
Tên tệp. "{tmp}\ModifyAutoexec. exe"

Nếu chương trình cần thêm thông tin, chẳng hạn như giá trị của hằng số "{app}", bạn có thể chuyển nó qua tham số dòng lệnh, i. e

[Run]
Tên tệp. "{tmp}\ModifyAutoexec. exe"; Tham số. """{app}"""

Ngoài ra, bạn có thể kết hợp tác vụ cài đặt vào EXE chính của ứng dụng và yêu cầu nó thực hiện tác vụ khi được gọi với tham số dòng lệnh đặc biệt. Ví dụ

[Run]
Tên tệp. "{app}\Chương trình của tôi. exe"; Tham số. "/DoTheTask"

Ký tự đại diện khớp với các tiện ích mở rộng không mong muốn

Nếu ký tự đại diện sau được sử dụng trong mục nhập phần [Tệp]

[Tệp]
Nguồn. "*. htm"; DestDir. "{ứng dụng}"

bạn có thể thấy rằng nó không chỉ khớp với các tệp có. htm, nhưng cũng có các tệp có phần mở rộng. phần mở rộng html

Điều này xảy ra vì trong Windows, các ký tự đại diện khớp với cả tên tệp dài và 8. 3 bí danh ["tên tệp ngắn"]. Theo mặc định, một tệp có tên "trang web. html" sẽ có 8. 3 bí danh "WEBPAG~1. HTM"; do đó, *. htm sẽ khớp với tệp

Để tránh điều này, hãy thêm tham số Loại trừ để lọc rõ ràng các tệp có. phần mở rộng html

[Tệp]
Nguồn. "*. htm"; Không bao gồm. "*. html"; DestDir. "{ứng dụng}"

Các thư mục trống không được bao gồm khi cờ "recursesubdirs" được sử dụng trên mục nhập [Tệp]

Thêm cờ createallsubdirs vào mục nhập phần [Tệp] của bạn và các thư mục trống sẽ được tạo khi cài đặt

Phần [Dirs] cũng có thể được sử dụng để tạo các thư mục trống

Thiết lập không thay thế một tệp cụ thể

So sánh số phiên bản trên tệp hiện có và tệp mới bằng cách nhấp chuột phải vào chúng trong Windows Explorer và chọn Thuộc tính. Theo mặc định, Inno Setup sẽ không thay thế tệp hiện có trừ khi tệp hiện có không có thông tin phiên bản hoặc có số phiên bản thấp hơn

Số phiên bản nhị phân của tệp là những gì Inno Setup thực sự so sánh và công tắc /LOG có thể hữu ích tại đây. Nhật ký sẽ hiển thị số phiên bản nhị phân của tệp và lý do tại sao một số tệp nhất định không được thay thế

Nếu bạn muốn buộc một tệp phải được thay thế bất kể số phiên bản của nó, hãy thêm cờ bỏ qua phiên bản vào mục nhập phần [Tệp]. Cờ này chỉ nên được sử dụng trên các tệp riêng tư đối với ứng dụng của bạn, không bao giờ trên các tệp hệ thống được chia sẻ

Nhiệm vụ cài đặt

Tạo lối tắt Internet [URL]

Đầu tiên tạo một tệp có tên, ví dụ: "trang web. url" và đặt những dòng này bên trong nó

[InternetShortcut]
URL=http. // trang web. Địa điểm. địa chỉ/

Sau đó thêm những dòng này vào kịch bản của bạn

[Tệp]
Nguồn. "trang mạng. url"; DestDir. "{ứng dụng}"

[Biểu tượng]
Tên. "{group}\Truy cập trang web của tôi"; . "{ứng dụng}\trang web. url"

Đặt trường "Bắt đầu" trên Phím tắt

Sử dụng tham số WorkingDir trên mục nhập phần [Biểu tượng]

Tạo liên kết tệp

Trước tiên, đặt chỉ thị phần [Thiết lập] "ChangesAssociations" thành "có". Sau đó tạo 5 mục [Registry] như hình bên dưới để tạo liên kết file

[Đăng ký]
Gốc. HKA; . "Phần mềm\Lớp học\. myp\OpenWithProgids"; Loại giá trị. chuỗi; . "Tệp chương trình của tôi. myp"; Dữ liệu giá trị. ""; . uninsdeletevalue

". myp" là tiện ích mở rộng mà chúng tôi đang liên kết. "Tệp chương trình của tôi. myp" là tên nội bộ cho loại tệp được lưu trữ trong sổ đăng ký. Đảm bảo rằng bạn sử dụng một tên duy nhất cho tên này để bạn không vô tình ghi đè khóa đăng ký của ứng dụng khác

Nguồn gốc. HKA; . "Phần mềm\Lớp học\MyProgramFile. myp"; Loại giá trị. chuỗi; . ""; . "Tệp chương trình của tôi"; . uninsdeletekey

"Tệp chương trình của tôi" ở trên là tên của loại tệp như được hiển thị trong Explorer

Nguồn gốc. HKA; . "Phần mềm\Lớp học\MyProgramFile. myp\DefaultIcon"; Loại giá trị. chuỗi; . ""; . "{app}\MyProg. exe,0"

"DefaultIcon" là khóa đăng ký chỉ định tên tệp chứa biểu tượng để liên kết với loại tệp. ",0" yêu cầu Explorer sử dụng biểu tượng đầu tiên từ MyProg. người cũ. [",1" có nghĩa là biểu tượng thứ hai. ]

Nguồn gốc. HKA; . "Phần mềm\Lớp học\MyProgramFile. myp\shell\open\command"; Loại giá trị. chuỗi; . ""; . """{app}\MyProg. exe"" ""%1"""

"shell\open\command" là khóa đăng ký chỉ định chương trình sẽ thực thi khi một loại tệp được bấm đúp trong Explorer. Các trích dẫn xung quanh nằm trong dòng lệnh để nó xử lý chính xác các tên tệp dài

Nguồn gốc. HKA; . "Phần mềm\Lớp\Ứng dụng\MyProg. exe\SupportedTypes"; Loại giá trị. chuỗi; . ". myp"; Dữ liệu giá trị. ""

Ngoài ra, hãy xem chủ đề Chế độ cài đặt phi quản trị trong tài liệu để biết chi tiết về giá trị khóa HKA

Đặt biến môi trường

Các biến môi trường được lưu trữ dưới dạng các giá trị chuỗi trong sổ đăng ký, vì vậy có thể thao tác chúng bằng phần [Registry]. Các biến môi trường toàn hệ thống được đặt tại

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Các biến môi trường dành riêng cho người dùng được đặt tại

HKEY_CURRENT_USER\Môi trường

Đặt hộp "Đóng khi thoát" trên Lối tắt đến Chương trình MS-DOS

Sử dụng cờ "closeonexit" và "dontcloseonexit" trong phần [Biểu tượng]

Tạo bản sao lưu trước khi thay thế tệp

Inno Setup hiện không có tính năng cụ thể để thực hiện điều đó, nhưng bạn có thể tạo một bản sao của tệp trước khi tệp bị thay thế bằng cách sử dụng mục nhập phần [Tệp] tương tự như sau

Nguồn. "{app}\MyProg. exe"; DestDir. "{ứng dụng}\sao lưu"; . Skipifsourcedoesntexist bên ngoài uninsneveruninstall

Cài đặt các tệp khác nhau tùy thuộc vào phiên bản Windows

Điều này có thể được thực hiện thông qua các tham số MinVersion và/hoặc OnlyBelowVersion trên một mục nhập. Xem chủ đề Tham số chung trong tài liệu để biết chi tiết

Cài đặt quyền trên tệp, thư mục hoặc khóa đăng ký

Các phần [Dirs], [Files] và [Registry] hỗ trợ các tham số Quyền để đặt quyền trên các thư mục, tệp và khóa đăng ký tương ứng

Nếu bạn có nhu cầu nâng cao hơn, hãy xem SetACL

Bắt đầu một chương trình khi Windows khởi động

Có hai cách khác nhau để thực hiện điều này

  1. Tạo lối tắt trong nhóm Khởi động

    [Biểu tượng]
    Tên. "{autostartup}\Chương trình của tôi"; . "{app}\MyProg. exe"

  2. Hoặc tạo một giá trị trong khóa Run của sổ đăng ký

    [Đăng ký]
    Gốc. HKA; . "PHẦN MỀM\Microsoft\Windows\CurrentVersion\Run"; . chuỗi; . "MyProg"; . """{app}\MyProg. exe"""; Cờ. uninsdeletevalue

Xem chủ đề Hằng số trong tài liệu để biết thêm thông tin về hằng số {autostartup}

Ngoài ra, hãy xem chủ đề Chế độ cài đặt phi quản trị trong tài liệu để biết chi tiết về giá trị khóa HKA

Chạy tập tin hàng loạt

Bạn có thể chạy một tệp thực thi bằng cách chỉ định tên tệp trực tiếp trong tham số Tên tệp của mục nhập phần [Chạy]

[Run]
Tên tệp. "{app}\YourBatchFile. dơi"

Phát hiện các phiên bản đang chạy trong bất kỳ phiên người dùng nào với AppMutex

AppMutex theo mặc định sẽ không tìm thấy các mutex được tạo trong các phiên người dùng ngoài phiên Thiết lập/Gỡ cài đặt đang chạy bên dưới. Điều này là do mỗi phiên người dùng có không gian tên hạt nhân riêng

Để phát hiện các bộ chuyển đổi được tạo trong các phiên khác, ứng dụng của bạn phải tạo hai bộ chuyển đổi. một cái có tiền tố Global\ và cái kia không có

Mutexes với tiền tố Global\ có thể truy cập được từ bất kỳ phiên người dùng nào. Một mutex có tên tương tự cũng phải được tạo trong không gian tên phiên [i. e. không có tiền tố Global\] trong trường hợp việc tạo mutex Global không thành công do các hạn chế về bảo mật

Ngoài ra, một bộ mô tả bảo mật đặc biệt phải được chuyển vào mỗi lệnh gọi CreateMutex[] để đảm bảo những người dùng khác nhau có thể truy cập mutex

Dưới đây là một ví dụ về cách tạo hai mutexes trong Delphi

thủ tục CreateMutexes[const MutexName. String];
{ Tạo hai mutex được trình cài đặt/trình gỡ cài đặt kiểm tra để xem liệu
  chương trình có còn chạy hay không. }
const
  SECURITY_DESCRIPTOR_REVISION = 1;
var
  SecurityDesc. TSecurityDescriptor;
  SecurityAttr. TSecurityAttributes;
bắt đầu
  { Theo mặc định, chỉ người dùng đang chạy
     quy trình mới có thể truy cập các mutex đã tạo. Chúng tôi cần tất cả người dùng đều có thể truy cập các mutex của mình, vì vậy
    để tính năng phát hiện mutex có thể hoạt động trong các phiên của người dùng. Để làm điều này
    chúng tôi sử dụng bộ mô tả bảo mật có DACL null. }
  InitializeSecurityDescriptor[@SecurityDesc, SECURITY_DESCRIPTOR_REVISION];
  SetSecurityDescriptorDacl[@SecurityDesc, True, nil, False];
  SecurityAttr. nChiều dài. = SizeOf[SecurityAttr];
  SecurityAttr. lpSecurityDescriptor. = @SecurityDesc;
  SecurityAttr. bInheritHandle. = False;
  CreateMutex[@SecurityAttr, False, PChar[MutexName]];
  CreateMutex[@SecurityAttr, False, PChar['Global\' + MutexName]
end;

...

bắt đầu
  CreateMutexes['YourMutexNameGoesHere'];
kết thúc;

Trong tập lệnh của bạn, hãy đặt AppMutex như sau

[Thiết lập]
AppMutex=YourMutexNameGoesHere,Global\YourMutexNameGoesHere

Cài đặt tệp OCX

Cách được đề xuất để cài đặt tệp OCX như sau

[Tệp]
Nguồn. "ComCtl32. ocx"; DestDir. "{sys}"; . khởi động lạithay thế máy chủ đăng ký tệp chia sẻ

khả năng tương thích

Khả năng tương thích hệ điều hành

Xem trang Giới thiệu

Đặc quyền hành chính

Cài đặt Inno Setup điển hình không yêu cầu quyền quản trị. Tuy nhiên, có những trường hợp ngoại lệ như được ghi chú dưới đây

Những thứ yêu cầu đặc quyền quản trị

  • Sử dụng "Đặc quyềnYêu cầu=quản trị viên" trong phần [Thiết lập] của tập lệnh. Điều này khiến Thiết lập bị hủy bỏ với thông báo lỗi nếu người dùng thiếu đặc quyền quản trị
  • Sử dụng cờ "khởi động lại" trong phần [Tệp]. Cờ này khiến Inno Setup gọi hàm MoveFileEx, hàm này cố ghi vào "HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ Session Manager". Quyền ghi vào khóa này bị hạn chế đối với Quản trị viên
  • Ghi vào bất kỳ khóa nào trong HKEY_USERS\. MẶC ĐỊNH sử dụng phần [Registry]. Quyền ghi vào khóa này bị hạn chế đối với Quản trị viên
  • Sử dụng cờ "regserver" trong phần [Files]. Trong hầu hết các trường hợp, việc đăng ký một DLL liên quan đến việc ghi vào HKEY_CLASSES_ROOT, một đặc quyền không được cấp cho người dùng thông thường
  • Sử dụng cờ "sharedfile" là phần [Files]. Cờ này khiến Thiết lập Inno tạo/cập nhật giá trị trong "HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ SharedDLLs". Người dùng thông thường không được phép ghi vào khóa đó
  • Ghi vào bất kỳ khóa nào trong HKEY_LOCAL_MACHINE hoặc HKEY_CLASSES_ROOT bằng phần [Registry]. Người dùng thông thường không được phép ghi vào các khóa đó

Bản thân Inno Setup không yêu cầu quyền ghi vào thư mục Windows hoặc bất kỳ khóa đăng ký nào khác không được đề cập ở trên

Điều gì khác biệt khi cài đặt được chạy bởi người dùng không có đặc quyền quản trị?

  • Khóa đăng ký cho mục nhập Bảng điều khiển Thêm/Xóa Chương trình được tạo trong HKEY_CURRENT_USER thay vì HKEY_LOCAL_MACHINE. Do đó, chỉ người dùng đã cài đặt chương trình mới thấy mục Thêm/Xóa Chương trình cho nó
  • Hằng số "{group}" luôn trỏ đến hồ sơ của người dùng hiện tại, trái ngược với hồ sơ Tất cả người dùng
  • Chương trình có thể được gỡ cài đặt bởi bất kỳ người dùng nào. [Khi quản trị viên cài đặt một chương trình, chỉ quản trị viên mới được phép gỡ cài đặt chương trình đó. ]

Đồng thời xem chủ đề Chế độ cài đặt phi quản trị trong tài liệu để biết chi tiết

Điều khoản khác

Có bất kỳ giới hạn nào về số lượng tệp, v.v. có thể được bao gồm trong một cài đặt?

Cài đặt Inno không đặt giới hạn tùy ý về số lượng tệp, lối tắt, mục đăng ký, v.v. mà bạn có thể bao gồm trong một cài đặt

Chính xác thì điều gì sẽ xảy ra khi người dùng nhấp vào Hủy trong quá trình cài đặt?

Khi nhấp vào Hủy, Thiết lập sẽ bắt đầu hoàn nguyên các thay đổi mà nó đã thực hiện cho đến nay theo cách rất giống với chương trình Gỡ cài đặt. Do đó, một ứng dụng được cài đặt một phần không còn sót lại

Cái gì đây _iu14D2N. tmp trong thư mục TEMP của tôi?

Tệp tạm thời có tên như "_iu14D2N. tmp" được tạo khi bạn gỡ cài đặt chương trình đã sử dụng Inno Setup làm trình cài đặt. Lý do tệp vẫn còn trong thư mục sau khi quá trình gỡ cài đặt hoàn tất là Windows không cho phép các tệp thực thi đang chạy tự xóa. Vì vậy, những gì nó làm là lên lịch để tệp tự động bị xóa vào lần khởi động lại máy tính tiếp theo. Nếu bạn không muốn đợi đến lúc đó, thì việc xóa tệp theo cách thủ công là hoàn toàn an toàn, miễn là hiện không có trình gỡ cài đặt nào đang chạy

Lưu ý rằng hành vi này không phải là duy nhất đối với Cài đặt Inno

Tại sao Thiết lập đăng ký tệp khi chúng không được thay thế?

Khi một tệp có cờ máy chủ đăng ký, Thiết lập sẽ cố gắng đăng ký tệp ngay cả khi nó không được thay thế trong quá trình cài đặt [e. g. , nếu tệp hiện có là phiên bản mới hơn]

Hành vi này thoạt nhìn có vẻ thừa, nhưng trên thực tế nó rất cần thiết. Bất cứ ai đã cài đặt tệp ở nơi đầu tiên có thể chưa đăng ký nó. Hoặc, tệp hiện có bằng cách nào đó có thể đã bị hủy đăng ký mà không bị xóa. Nếu Thiết lập chỉ đăng ký các tệp đã được thay thế, thì trong cả hai trường hợp này, tệp sẽ vẫn ở trạng thái chưa đăng ký khi kết thúc cài đặt và ứng dụng của bạn sẽ không hoạt động

Tại sao có số EXE của trình gỡ cài đặt trong tên của nó?

Những người dùng mới thường thắc mắc tại sao trình gỡ cài đặt EXE lại có các số trong tên của nó [e. g. unins000. exe]

Đó là do Inno Setup cho phép cài đặt nhiều ứng dụng vào cùng một thư mục. Khi điều đó xảy ra, trình gỡ cài đặt của ứng dụng đầu tiên được đặt tên là unins000. exe, trình gỡ cài đặt của ứng dụng thứ hai có tên là unins001. exe, v.v. Nếu một tên cố định được sử dụng, thì chỉ có thể gỡ cài đặt ứng dụng được cài đặt gần đây nhất

Tôi có được phép phân phối lại trình biên dịch Inno Setup với ứng dụng của mình không?

Nếu ứng dụng của bạn cần tạo cài đặt nhanh chóng, bạn có thể triển khai các tệp cho trình biên dịch Cài đặt Inno cùng với nó, miễn là tuân thủ các điều khoản của giấy phép Cài đặt Inno

Làm cách nào để xóa trích dẫn khỏi chuỗi trong PHP?

Hãy thử điều này. str_replace['"', "", $string]; str_replace["'", "", $string]; Nếu không, hãy tìm một số biểu thức chính quy . preg_replace["/

Làm cách nào để xóa dấu ngoặc kép đầu tiên và cuối cùng khỏi một chuỗi trong PHP?

Nói bằng từ đơn giản. " trim[] sẽ xóa các trích dẫn liên tiếp từ đầu hoặc từ cuối.

Làm cách nào để cắt dấu ngoặc kép trong PHP?

Hàm str_replace[] và hàm preg_replace[] trong PHP có thể được sử dụng để xóa dấu ngoặc kép khỏi chuỗi.

Làm cách nào để xóa dấu ngoặc kép trong mảng trong PHP?

Làm cách nào để xóa dấu ngoặc kép khỏi một mảng? . using replaceAll[] We will be using the replaceAll[] method of javascript to replace all the occurrences of double quotes [“] with [”].

Chủ Đề