duplicati/duplicati · error · Error
SetInitPassword: empty password in CustomActionData.
Error message
SetInitPassword: empty password in CustomActionData.
What it means
Thrown by VerifyConsistencyForRepairAsync when FilesetEntry rows reference non-existent FileLookup entries AND the code successfully identified the affected filesets. The message lists up to 10 fileset versions (with their version number, timestamp, and database ID) and appends '... and more' if more than 10 filesets are affected (the overflow flag).
Source
Thrown at ReleaseBuilder/Resources/Windows/TrayIcon/SetInitPassword.js:41
// No data passed - fail loudly. The MSI engine will surface
// this as a CA failure because Return="check" is set on the
// matching <CustomAction>.
throw new Error("SetInitPassword: CustomActionData is empty.");
}
var sep = data.indexOf("|");
if (sep < 0) {
throw new Error("SetInitPassword: CustomActionData is missing the '|' separator.");
}
var exe = data.substring(0, sep);
var password = data.substring(sep + 1);
if (exe.length === 0) {
throw new Error("SetInitPassword: empty exe path in CustomActionData.");
}
if (password.length === 0) {
throw new Error("SetInitPassword: empty password in CustomActionData.");
}
// Set the env var on the current script's process. WScript.Shell.Run
// launches the child as a child process of this script process, so
// the env var is inherited. The variable is NOT promoted to user-
// or system-wide because we use the "PROCESS" environment scope.
shell.Environment("PROCESS").Item("DUPLICATI__INIT_PASSWORD") = password;
try {
// First arg quotes the exe path itself, then appends the
// sub-command. Quoting the exe is necessary because the install
// dir may contain spaces. Window-style 0 hides the window;
// 'true' makes Run wait for the child to exit and return its
// exit code.
var cmd = "\"" + exe + "\" set-init-password";
var rc = shell.Run(cmd, 0, true);
if (rc !== 0) {
throw new Error("SetInitPassword: child process exited with code " + rc);
}View on GitHub (pinned to 3f348be3e3)
Solutions
- Run the Duplicati repair command -- the detailed fileset list helps identify which backup versions are affected.
- For the specific filesets listed in the error, consider deleting those backup versions individually and re-running the backup.
- Delete and recreate the local database from the remote destination if repair does not resolve the dangling references.
- Back up the local SQLite database before attempting manual SQL fixes to FilesetEntry.
Example fix
// before
await db.VerifyConsistencyForRepairAsync(blocksize, hashsize, verifyfilelists, token);
// after
try {
await db.VerifyConsistencyForRepairAsync(blocksize, hashsize, verifyfilelists, token);
} catch (DatabaseInconsistencyException ex) {
// ex.Message lists affected filesets -- log them for diagnosis
logger.LogError(ex, "Consistency check failed for filesets listed in message");
await RepairDatabaseAsync(token);
} Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check: count dangling FilesetEntry references with fileset detail
long dangling = await db.ExecuteScalarInt64Async(
"SELECT COUNT(*) FROM \"FilesetEntry\" fe WHERE fe.\"FileID\" NOT IN (SELECT \"ID\" FROM \"FileLookup\")", token);
if (dangling > 0)
await RepairDatabaseAsync(token); Type guard
// N/A -- runtime database-state error
Try / catch
try {
await db.VerifyConsistencyForRepairAsync(blocksize, hashsize, verifyfilelists, token);
} catch (DatabaseInconsistencyException ex) when (ex.Message.Contains("FilesetEntry without corresponding FileLookup")) {
logger.LogError(ex, "Consistency failure: {Message}", ex.Message);
await RepairDatabaseAsync(token);
} Prevention
- Always use graceful shutdown; avoid SIGKILL on the Duplicati process during operations.
- Run VerifyConsistencyForRepairAsync after every major delete or compaction cycle.
- Document which backup versions are affected to prioritize repair.
When it happens
Trigger: After detecting nonAttachedFiles != 0 (dangling FilesetEntry.FileID references), the code queries the first 11 distinct FilesetIDs with the problem, cross-references them with FilesetTimesAsync to produce human-readable version/timestamp pairs, and throws this detailed message. The overflow flag is set when more than 10 fileset IDs were found.
Common situations: Same root causes as the generic variant (error 522): interrupted delete, corruption, or cascade failures. The difference is that here the filesets are still present in the Fileset table so their metadata can be looked up for a more informative error message.
Related errors
- SetInitPassword: empty exe path in CustomActionData.
- SetInitPassword: CustomActionData is empty.
- SetInitPassword: CustomActionData is missing the '|' separat
- SetInitPassword: child process exited with code " + rc
- AgentSettingsKeyMissing
AI-assisted analysis of duplicati/duplicati@3f348be3e3 (2026-08-13).
Data as JSON: /api/errors/74b270b75ddabaa7.
Report an issue: GitHub.