1. পণ্য সেটিংস এবং একটি পরীক্ষা লাইসেন্স প্রস্তুত করুন
আপনার C#/.NET বা WinForms অ্যাপে গ্রাহকের লাইসেন্স কী ও ফিচারের অনুমতি যোগ করুন। এই নির্দেশিকা আপনার বাণিজ্যিক সফটওয়্যার ব্যবহারের অনুমতি নিয়ে; সোর্স কোডের জন্য ওপেন-সোর্স লাইসেন্স বেছে নেওয়া আলাদা সিদ্ধান্ত। শুরুতে ডিভাইসের সঙ্গে বাঁধা লাইসেন্স এবং ব্যবহার গণনা ছাড়া এক্সপোর্ট ফিচার ব্যবহার করুন।
ডিভাইস কোটা বর্তমান সক্রিয়করণ অনুযায়ী গণনা হয় এবং মুক্ত করলে ফেরত আসে। সাধারণ লাইসেন্স অফলাইনেও গণনা হয়; ফ্লোটিং লাইসেন্সের লিজ শেষ হলেও কোটা স্বয়ংক্রিয়ভাবে ফেরত আসে।
- কনসোল > পণ্য থেকে পণ্যের ID কপি করুন। একই পণ্যের স্বাক্ষরের পাবলিক কী খুলে প্রতিটি কী ID/পাবলিক কী জোড়া ইনিশিয়ালাইজেশন কোডে বসান; YOUR_PRODUCT_ID, YOUR_KEY_ID এবং YOUR_PUBLIC_KEY বদলান। দ্রুত ইন্টিগ্রেশন থেকেও এই কোড পাওয়া যায়। পণ্যের কনফিগারেশন ফাইল লাগে না; SDK ডিফল্টভাবে https://www.licentivo.com ব্যবহার করে।
- .NET 8 SDK বা তার পরে ইন্সটল করুন। Licentivo কুইক ইন্টিগ্রেশনে, আপনার পণ্য তৈরি বা নির্বাচন করুন এবং এর নীতি ও লাইসেন্সে রপ্তানি বৈশিষ্ট্যের অনুমতি দিন।
2. পিন করা .NET প্যাকেজ ইনস্টল করুন
আপনার অ্যাপ প্রকল্পে নিচের কমান্ড চালিয়ে বা বিল্ড ডিপেন্ডেন্সি যোগ করে SDK 0.11.6 ইনস্টল করুন। প্যাকেজ ম্যানেজার SDK সংগ্রহ করে; সোর্স ZIP ডাউনলোড ও এক্সট্র্যাক্ট করা বা স্থানীয় পাথ সেট করার প্রয়োজন নেই।
dotnet add package Licentivo.SDK --version 0.11.6dotnet new console --name LicensedApp --framework net8.0
cd LicensedApp
dotnet add package Licentivo.SDK --version 0.11.63. একটি বাস্তব অপারেশন সক্রিয় এবং রক্ষা করুন
অ্যাপ চালু বা সক্রিয় করার সময় SDK শুরু করুন। সক্রিয়করণ ফর্ম থেকে গ্রাহকের কী পড়ে পণ্যের ID ও বিশ্বস্ত কী দিন। অ্যাপ বন্ধ হওয়া পর্যন্ত ক্লায়েন্ট রাখুন। আসল কাজের প্রবেশপথে RunFeature ব্যবহার করে উদাহরণের এক্সপোর্টের বদলে নিজের ফাংশন দিন।
using Licentivo;
// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const string ProductId = "YOUR_PRODUCT_ID";
var TrustedKeys = new Dictionary<string,string> { ["YOUR_KEY_ID"] = "YOUR_PUBLIC_KEY" };
// END LICENTIVO PRODUCT
static string Setting(string name, string fallback) => Environment.GetEnvironmentVariable(name) ?? fallback;
// Call at the business entry point, including shortcuts and alternate menu actions.
static async Task ExportReport(string path)
{
// Replace this write with your existing, non-metered export operation.
await File.WriteAllTextAsync(path, "A report generated by the licensed application.\n");
}
try
{
// In a GUI, read the activation input. Later starts pass an empty key.
await using var client = await LicentivoClient.OpenProduct(
ProductId, TrustedKeys, Setting("LICENTIVO_LICENSE_KEY", ""),
error => Console.Error.WriteLine($"Background verification: {error.Message}"));
var feature = Setting("LICENTIVO_FEATURE", "export");
var path = Setting("LICENTIVO_OUTPUT", "licensed-report.txt");
if (Setting("LICENTIVO_METERED", "") == "1")
await client.RunMeteredFeature(feature, 1, Setting("LICENTIVO_OPERATION_ID", ""), () => ExportReport(path));
else
await client.RunFeature(feature, () => ExportReport(path));
Console.WriteLine($"License OK: {feature} is available\nExport completed: {path}");
// Keep client alive in your real app; disposal belongs in app shutdown.
}
catch (Exception error)
{
Console.Error.WriteLine(error.Message);
Environment.ExitCode = 2;
}
$env:LICENTIVO_LICENSE_KEY = 'YOUR_TEST_LICENSE_KEY'
dotnet run
# On later starts, restore the saved device credential:
Remove-Item Env:LICENTIVO_LICENSE_KEY
dotnet runexport LICENTIVO_LICENSE_KEY='YOUR_TEST_LICENSE_KEY'
dotnet run
# On later starts, restore the saved device credential:
unset LICENTIVO_LICENSE_KEY
dotnet run4. অ্যাক্টিভেশন সংযোগ করুন এবং WinForms এ রপ্তানি করুন
প্রতিটি এক্সপোর্ট এন্ট্রি পয়েন্টে, অপেক্ষা করুন client.RunFeature("export", ExportReport)। মেনু আইটেম এবং শর্টকাট অন্তর্ভুক্ত করুন। একটি অপারেশন চলাকালীন শুরু করার বোতামটি অক্ষম করুন, ত্রুটিগুলি ধরুন এবং অন্য প্রচেষ্টার অনুমতি দেওয়ার আগে অস্বীকারটি দেখান৷
উইন্ডো খোলা থাকাকালীন ক্লায়েন্টকে জীবিত রাখুন যাতে SDK হার্টবিট অনুমোদন রিফ্রেশ করতে পারে। Invoke বা BeginInvoke সহ UI থ্রেডে মার্শাল পটভূমি ত্রুটি বার্তা। অ্যাপ্লিকেশন শাটডাউন এ DisposeAsync অপেক্ষা করুন; স্বাভাবিক নিষ্পত্তি একটি ডিভাইস-বাউন্ড রেজিস্ট্রেশন ধরে রাখে এবং একটি ভাসমান আসন ফেরত দেওয়ার চেষ্টা করে।
ডেস্কটপ উদাহরণটি নিচের ডকুমেন্টেশন লিংকে আলাদাভাবে দেওয়া আছে। WinForms-এর জন্য Windows প্রয়োজন; উপরের কনসোল উদাহরণটি Linux ও macOS-এও চলে।
dotnet new winforms --name LicensedWinForms --framework net8.0
cd LicensedWinForms
dotnet add package Licentivo.SDK --version 0.11.6using Licentivo;
namespace LicensedWinForms;
sealed class DemoForm : Form {
// BEGIN LICENTIVO PRODUCT
// Console > Products > Signing public keys: paste Product ID and every key ID/public key pair.
const string ProductId = "YOUR_PRODUCT_ID";
static readonly Dictionary<string,string> TrustedKeys = new() { ["YOUR_KEY_ID"] = "YOUR_PUBLIC_KEY" };
// END LICENTIVO PRODUCT
readonly TextBox key = new() { Width = 380, UseSystemPasswordChar = true };
readonly Label status = new() { AutoSize = true, MaximumSize = new Size(550, 0), Text = "Enter a key, or leave empty to restore this device." };
readonly CancellationTokenSource lifetime = new();
LicentivoClient? client;
bool busy;
[STAThread] static void Main() { ApplicationConfiguration.Initialize(); Application.Run(new DemoForm()); }
DemoForm() {
Text = "Licentivo · Report export"; ClientSize = new Size(600, 220);
var panel = new FlowLayoutPanel { Dock = DockStyle.Fill, Padding = new Padding(20), FlowDirection = FlowDirection.TopDown, WrapContents = false, AutoScroll = true };
Controls.Add(panel); panel.Controls.Add(new Label { Text = "Customer license key", AutoSize = true }); panel.Controls.Add(key);
Add(panel, "Activate / restore", async () => {
if (client is not null) { await client.DisposeAsync(); client = null; }
client = await LicentivoClient.OpenProduct(ProductId, TrustedKeys, key.Text, ct: lifetime.Token);
key.Clear(); status.Text = client.Status().State;
});
var buttons = new FlowLayoutPanel { AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, WrapContents = false }; panel.Controls.Add(buttons);
Add(buttons, "Export CSV", () => Export("export", "report.csv"));
Add(buttons, "Pro export", () => Export("pro", "pro-report.csv"));
Add(buttons, "Refresh license", async () => { await Require().RefreshOnline(lifetime.Token); status.Text = Require().Status().State; });
panel.Controls.Add(status);
FormClosed += async (_, _) => { lifetime.Cancel(); if (client is not null) await client.DisposeAsync(); };
}
LicentivoClient Require() => client ?? throw new InvalidOperationException("Activate the application first.");
async Task Export(string feature, string filename) {
using var save = new SaveFileDialog { FileName = filename, Filter = "CSV report|*.csv" };
await Require().RunFeature(feature, async () => {
if (save.ShowDialog(this) != DialogResult.OK) return;
await File.WriteAllTextAsync(save.FileName, "Item,Quantity,Price\nNotebook,2,12.50\nPen,5,3.00\n");
status.Text = "Saved: " + save.FileName;
});
}
void Add(Control panel, string title, Func<Task> action) {
var button = new Button { Text = title, AutoSize = true }; panel.Controls.Add(button);
button.Click += async (_, _) => {
if (busy) return; busy = true; status.Text = "Working…";
try { await action(); } catch (Exception error) { if (!IsDisposed) status.Text = error.Message; }
finally { busy = false; }
};
}
}
dotnet runভাসমান লাইসেন্স সহ সমসাময়িক সফ্টওয়্যার ব্যবহার পরিচালনা করুন
5. সক্রিয়করণ যাচাই করুন, পুনরায় চালু করুন এবং অস্বীকার করুন
- আপনার পরীক্ষার কী দিয়ে চালান এবং লাইসেন্স ঠিক আছে এবং রপ্তানি সম্পন্ন হয়েছে তা নিশ্চিত করুন, তারপর রিপোর্টের বিষয়বস্তু পরীক্ষা করুন।
- মূল পরিবেশ পরিবর্তনশীল সরান এবং একই অপারেটিং-সিস্টেম ব্যবহারকারীর অধীনে পুনরায় চালু করুন। বিদ্যমান ডিভাইস শংসাপত্র একটি নতুন নিবন্ধিত ডিভাইস ছাড়া পুনরুদ্ধার করা উচিত.
- লাইসেন্স থেকে অনুপস্থিত একটি বৈশিষ্ট্য নির্বাচন করতে LICENTIVO_FEATURE এবং একটি নতুন ফাইলের নাম নির্বাচন করতে LICENTIVO_OUTPUT ব্যবহার করুন৷ একটি অশূন্য প্রস্থান কোড নিশ্চিত করুন এবং এই নতুন ফাইলটি কখনই তৈরি করা হবে না।
- অফলাইন স্টার্টআপ চেক করুন শুধুমাত্র একটি নীতি যা এটির অনুমতি দেয় এবং একটি বৈধ স্বাক্ষরিত ক্যাশে। ফ্লোটিং এবং শুধুমাত্র-অনলাইন স্টার্টআপের জন্য সার্ভারের অনুমোদন প্রয়োজন।
একটি মাসিক ব্যবহারের কাউন্টার সহ সফ্টওয়্যার রপ্তানি সীমিত করুন
লাইসেন্স চেক সমস্যা সমাধান করুন
পণ্যের ID, প্রতিটি কী ID/পাবলিক কী জোড়া এবং গ্রাহকের লাইসেন্স যাচাই করুন। পাবলিক কী পণ্যের; লাইসেন্স ও ডিভাইস পরিচয়পত্র আলাদা। পরীক্ষার কী বা ব্যবস্থাপনার API Key বিতরণ করবেন না।
একটি মেয়াদোত্তীর্ণ লাইসেন্স, ডিভাইস সীমা বা অনুপস্থিত বৈশিষ্ট্য একটি অনুমোদন অস্বীকার. ত্রুটি এবং অনুরোধ আইডি দেখান, এবং RunFeature বাইপাস করার পরিবর্তে কনসোলে লাইসেন্স বা নীতির সমাধান করুন।
মাসিক ব্যবহারের সীমার জন্য, RunMeteredFeature কল করার সময় একটি স্থিতিশীল কাজের আইডি এবং টেকসই ব্যবসায়িক ফলাফল বজায় রাখুন। সাধারণ অ্যাপ শাটডাউন এবং গ্রাহক-অনুরোধ নিষ্ক্রিয় করার বিভিন্ন উদ্দেশ্য রয়েছে; প্রতিটি প্রস্থানে একটি ডিভাইস-বাউন্ড রেজিস্ট্রেশন প্রকাশ করবেন না।