1. Siapkan pengaturan produk dan lisensi pengujian
Tambahkan kunci lisensi pelanggan dan izin fitur ke aplikasi C#/.NET atau WinForms Anda. Panduan ini membahas akses ke perangkat lunak komersial Anda; pemilihan lisensi sumber terbuka untuk kode merupakan keputusan tersendiri. Mulailah dengan lisensi yang terikat ke perangkat dan fitur ekspor tanpa penghitung penggunaan.
Kuota menghitung aktivasi saat ini dan kembali setelah dilepas. Lisensi biasa tetap dihitung saat luring; lisensi mengambang juga mengembalikan kuota ketika sewanya berakhir.
- Salin ID produk dari Konsol > Produk. Buka kunci publik penandatanganan produk yang sama, lalu masukkan semua pasangan ID kunci/kunci publik ke kode inisialisasi untuk mengganti YOUR_PRODUCT_ID, YOUR_KEY_ID, dan YOUR_PUBLIC_KEY. Integrasi cepat juga dapat menghasilkan kode ini. Tidak perlu berkas konfigurasi; SDK memakai https://www.licentivo.com secara bawaan.
- Instal .NET 8 SDK atau lebih baru. Dalam integrasi Licentivo Quick, buat atau pilih produk Anda dan izinkan fitur ekspor dalam kebijakan dan lisensinya.
2. Instal paket .NET yang disematkan
Instal SDK 0.11.6 dengan perintah berikut di proyek aplikasi Anda atau tambahkan dependensi build. Pengelola paket mengambil SDK; tidak perlu mengunduh dan mengekstrak kode sumber atau mengatur jalur lokal.
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. Aktifkan dan lindungi satu operasi nyata
Inisialisasikan SDK saat aplikasi dimulai atau diaktifkan. Baca kunci pelanggan dari formulir aktivasi, lalu berikan ID produk dan kunci tepercaya. Pertahankan klien sampai aplikasi ditutup. Letakkan RunFeature pada operasi bisnis nyata dan ganti ekspor dengan fungsi Anda.
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. Hubungkan aktivasi dan ekspor ke WinForms
Di setiap titik masuk ekspor, tunggu client.RunFeature("export", ExportReport). Sertakan item menu dan pintasan. Nonaktifkan tombol inisiasi saat operasi berjalan, tangkap kesalahan dan tampilkan penolakan sebelum mengizinkan upaya lain.
Biarkan klien tetap hidup saat jendela terbuka sehingga SDK detak jantung dapat menyegarkan otorisasi. Pesan kesalahan latar belakang marshal ke thread UI dengan Invoke atau BeginInvoke. Tunggu DisposeAsync saat aplikasi dimatikan; pembuangan normal mempertahankan registrasi terikat perangkat dan berupaya mengembalikan kursi terapung.
Contoh aplikasi desktop disediakan secara terpisah melalui tautan dokumentasi di bawah. WinForms memerlukan Windows; contoh konsol di atas juga berjalan di Linux dan 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 runKelola penggunaan perangkat lunak secara bersamaan dengan lisensi mengambang
5. Verifikasi aktivasi, restart dan penolakan
- Jalankan dengan kunci pengujian Anda dan konfirmasikan Lisensi OK dan Ekspor selesai, lalu periksa konten laporan.
- Hapus variabel lingkungan utama dan mulai ulang di bawah pengguna sistem operasi yang sama. Kredensial perangkat yang ada harus dipulihkan tanpa perangkat baru yang didaftarkan.
- Gunakan LICENTIVO_FEATURE untuk memilih fitur yang tidak ada dalam lisensi dan LICENTIVO_OUTPUT untuk memilih nama file baru. Konfirmasikan kode keluar bukan nol dan file baru ini tidak pernah dibuat.
- Periksa startup offline hanya dengan kebijakan yang mengizinkannya dan cache bertanda tangan yang valid. Startup mengambang dan hanya online memerlukan persetujuan server.
Batasi ekspor perangkat lunak dengan penghitung penggunaan bulanan
Memecahkan masalah pemeriksaan lisensi
Periksa ID produk, semua pasangan ID kunci/kunci publik, dan lisensi pelanggan. Kunci publik milik produk; lisensi dan kredensial perangkat bersifat terpisah. Jangan bagikan kunci uji atau API Key pengelolaan.
Lisensi yang kedaluwarsa, batas perangkat, atau fitur yang hilang merupakan penolakan otorisasi. Tampilkan kesalahan dan ID permintaan, serta selesaikan lisensi atau kebijakan di konsol alih-alih melewati RunFeature.
Untuk batas penggunaan bulanan, pertahankan ID pekerjaan yang stabil dan hasil bisnis yang tahan lama saat memanggil RunMeteredFeature. Mematikan aplikasi secara normal dan Menonaktifkan yang diminta pelanggan memiliki tujuan berbeda; jangan melepaskan registrasi yang terikat perangkat pada setiap pintu keluar.