জাভাস্ক্রিপ্ট কাস্টমঅ্যাকশনগুলি ব্যবহার করুন কারণ এগুলি খুব সহজ
লোকেরা বলেছে যে এমএসআই কাস্টমঅ্যাকশনগুলির জন্য জাভাস্ক্রিপ্টটি ব্যবহার করা ভুল জিনিস । প্রদত্ত কারণ: ডিবাগ করা শক্ত, এটি নির্ভরযোগ্য করে তোলা শক্ত। আমি রাজি নই। এটি ডিবাগ করা কঠিন নয়, অবশ্যই সি ++ এর চেয়ে শক্ত কিছু নয়। এটা ঠিক অন্যরকম। আমি জাভাস্ক্রিপ্টে কাস্টমএকশনগুলি সি ++ ব্যবহারের চেয়ে খুব সহজ, খুব সহজ বলে খুঁজে পেয়েছি। অনেক দ্রুত. এবং ঠিক হিসাবে নির্ভরযোগ্য।
একটি মাত্র ত্রুটি আছে: জাভাস্ক্রিপ্ট কাস্টমঅ্যাকশনগুলি অর্কের মাধ্যমে বের করা যেতে পারে, যেখানে একটি সি / সি ++ সিএ-এর বিপরীত প্রকৌশল প্রয়োজন require যদি আপনি আপনার ইনস্টলার যাদুটিকে বৌদ্ধিক সম্পত্তি সুরক্ষিত হিসাবে বিবেচনা করেন তবে আপনি স্ক্রিপ্ট এড়াতে চাইবেন।
আপনি যদি স্ক্রিপ্ট ব্যবহার করেন তবে আপনাকে কিছু কাঠামো দিয়ে শুরু করতে হবে। আপনাকে শুরু করার জন্য এখানে কিছু।
কাস্টমঅ্যাকশনটির জন্য জাভাস্ক্রিপ্ট "বয়লারপ্লেট" কোড:
//
// CustomActions.js
//
// Template for WIX Custom Actions written in Javascript.
//
//
// Mon, 23 Nov 2009 10:54
//
// ===================================================================
// http://msdn.microsoft.com/en-us/library/sfw6660x(VS.85).aspx
var Buttons = {
OkOnly : 0,
OkCancel : 1,
AbortRetryIgnore : 2,
YesNoCancel : 3
};
var Icons = {
Critical : 16,
Question : 32,
Exclamation : 48,
Information : 64
};
var MsgKind = {
Error : 0x01000000,
Warning : 0x02000000,
User : 0x03000000,
Log : 0x04000000
};
// http://msdn.microsoft.com/en-us/library/aa371254(VS.85).aspx
var MsiActionStatus = {
None : 0,
Ok : 1, // success
Cancel : 2,
Abort : 3,
Retry : 4, // aka suspend?
Ignore : 5 // skip remaining actions; this is not an error.
};
function MyCustomActionInJavascript_CA() {
try {
LogMessage("Hello from MyCustomActionInJavascript");
// ...do work here...
LogMessage("Goodbye from MyCustomActionInJavascript");
}
catch (exc1) {
Session.Property("CA_EXCEPTION") = exc1.message ;
LogException(exc1);
return MsiActionStatus.Abort;
}
return MsiActionStatus.Ok;
}
// Pop a message box. also spool a message into the MSI log, if it is enabled.
function LogException(exc) {
var record = Session.Installer.CreateRecord(0);
record.StringData(0) = "CustomAction: Exception: 0x" + decimalToHexString(exc.number) + " : " + exc.message;
Session.Message(MsgKind.Error + Icons.Critical + Buttons.btnOkOnly, record);
}
// spool an informational message into the MSI log, if it is enabled.
function LogMessage(msg) {
var record = Session.Installer.CreateRecord(0);
record.StringData(0) = "CustomAction:: " + msg;
Session.Message(MsgKind.Log, record);
}
// http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx
var WindowStyle = {
Hidden : 0,
Minimized : 1,
Maximized : 2
};
// http://msdn.microsoft.com/en-us/library/314cz14s(v=VS.85).aspx
var OpenMode = {
ForReading : 1,
ForWriting : 2,
ForAppending : 8
};
// http://msdn.microsoft.com/en-us/library/a72y2t1c(v=VS.85).aspx
var SpecialFolders = {
WindowsFolder : 0,
SystemFolder : 1,
TemporaryFolder : 2
};
// Run a command via cmd.exe from within the MSI
function RunCmd(command)
{
var wshell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tmpdir = fso.GetSpecialFolder(SpecialFolders.TemporaryFolder);
var tmpFileName = fso.BuildPath(tmpdir, fso.GetTempName());
LogMessage("shell.Run("+command+")");
// use cmd.exe to redirect the output
var rc = wshell.Run("%comspec% /c " + command + "> " + tmpFileName, WindowStyle.Hidden, true);
LogMessage("shell.Run rc = " + rc);
// here, optionally parse the output of the command
if (parseOutput) {
var textStream = fso.OpenTextFile(tmpFileName, OpenMode.ForReading);
while (!textStream.AtEndOfStream) {
var oneLine = textStream.ReadLine();
var line = ParseOneLine(oneLine);
...
}
textStream.Close();
}
if (deleteOutput) {
fso.DeleteFile(tmpFileName);
}
return {
rc : rc,
outputfile : (deleteOutput) ? null : tmpFileName
};
}
তারপরে, কাস্টম অ্যাকশনটির এমন কিছু দিয়ে নিবন্ধ করুন:
<Fragment>
<Binary Id="IisScript_CA" SourceFile="CustomActions.js" />
<CustomAction Id="CA.MyCustomAction"
BinaryKey="IisScript_CA"
JScriptCall="MyCustomActionInJavascript_CA"
Execute="immediate"
Return="check" />
</Fragmemt>
আপনি অবশ্যই একাধিক কাস্টম ক্রিয়াকলাপ হিসাবে নিজের পছন্দমতো জাভাস্ক্রিপ্ট ফাংশন সন্নিবেশ করতে পারেন। একটি উদাহরণ: আমি জাভাস্ক্রিপ্টটি আইআইএস-এ একটি ডাব্লুএমআই কোয়েরি করতে, বিদ্যমান ওয়েবসাইটগুলির একটি তালিকা পেতে, যেখানে একটি আইএসএপিআই ফিল্টার ইনস্টল করা যেতে পারে used এই তালিকাটি পরে ইউআই অনুক্রমের পরে প্রদর্শিত একটি তালিকা বাক্সে পপুলিট করতে ব্যবহৃত হত। সব খুব সহজ।
আইআইএস 7-তে, আইআইএসের জন্য কোনও ডাব্লুএমআই সরবরাহকারী নেই, তাই আমি এটি ব্যবহার করেছি shell.Run()
সম্পাদনের জন্য অ্যাপসিএমডি.এক্স.সি. সহজ।
সম্পর্কিত প্রশ্ন: জাভাস্ক্রিপ্ট কাস্টমঅ্যাকশন সম্পর্কে