• Stars
    star
    184
  • Rank 209,187 (Top 5 %)
  • Language
    C++
  • License
    MIT License
  • Created over 13 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Windows utility that mounts a shadow copy of the disk at a drive letter and then spawns an arbitrary command.

Status

Shadowspawn is no longer under active development. I still run it every night on my machine, so it works fine, but I'm not planning on doing any additional coding on it. You are welcome to download and use it, and I still make an attempt to help people who are having problems with it.

You are welcome to fork the project. The license (MIT) is very permissive. Indeed, if you have any interest in taking over development, give me a shout: I'd be happy to redirect people to a more actively-maintained fork.

What Is ShadowSpawn?

ShadowSpawn is a tool for working with shadow copies. Shadow copies are read-only snapshots of your disk. Working with shadow copies instead of the actual files allows you to do things like work with in-use (locked) files.

ShadowSpawn works by making a shadow copy of your disk, making it available at a drive letter, then launching (spawning) another program that you specify.

Probably the most common way to use ShadowSpawn is to use Robocopy make a copy of files that are currently in use.

Installing ShadowSpawn

Most users can simply unzip the appropriate zip file from the download page. ShadowSpawn.exe can then just be run - there is no installer. However, ShadowSpawn uses the Visual C++ runtime, which may not be present on some machines. If ShadowSpawn does not work for you, run the vcredist executable available from the same download page.

Running ShadowSpawn

ShadowSpawn is a command-line tool: there is no GUI.

ShadowSpawn take three arguments:

  1. The directory that contains the files you want to snapshot.
  2. An available drive letter where the snapshot will become visible.
  3. A command to run.

Let's say that you wanted to use robocopy to copy files from the C:\foo directory to the C:\bar directory. You could do that with the following command:

shadowspawn C:\foo Q: robocopy Q:\ C:\bar /s

That would cause shadowspawn to

  1. Make a shadow copy of the C: drive.
  2. Mount the shadowed version of the C:\foo directory at Q:.
  3. Launch robocopy Q:\ C:\bar /s
  4. Wait for Robocopy to finish.
  5. Clean up the shadow copy and remove it from Q:

You can use any drive letter you want (it doesn't have to be Q:), but it does have to be a drive letter that's not currently being used for anything else.

You can run any command you want. So if you just wanted to use notepad to look at a shadow copy of C:\foo\blah.txt, you'd run

shadowspawn C:\foo Q: notepad Q:\blah.txt

Just remember that shadowspawn will remove the Q: drive as soon as the command you specify exits.

Relationship to HoboCopy

ShadowSpawn is derived from the same source code as HoboCopy and is intended to replace it. The evolution was driven by the fact that although the shadow copy part of HoboCopy works well enough, the copying part was nowhere near as robust as tools like RoboCopy. By providing a tool that just takes care of the shadow copy, ShadowSpawn allows users to work with locked and in-use files using any other tool, not just the limited copy features provided by HoboCopy.

Status

ShadowSpawn is currently at version 0.1.0, which is meant to indicate that it is an initial version. While it largely consists of fairly mature code taken from HoboCopy, there are bound to be a few issues as early adopters identify opportunities for improvement.

Reporting Bugs and Requesting Features

Please report bugs and request features using either the project issue tracking system or the project mailing list at [email protected] (website).

USAGE:

Usage:

shadowspawn [ /verbosity=LEVEL ] <src> <drive:> <command> [ <arg> ... ]

Creates a shadow copy of <src>, mounts it at <drive:> and runs <command>.

/verbosity   - Specifies how much information ShadowSpawn will emit
               during execution. Legal values are: 0 - almost no
               information will be emitted. 1 - Only error information
               will be emitted. 2 - Errors and warnings will be
               emitted. 3 - Errors, warnings, and some status
               information will be emitted. 4 - Lots of diagnostic
               information will be emitted. The default level is 2.

<src>        - The directory to shadow copy (the source directory).
<drive:>     - Where to mount the shadow copy. Must be a single letter
               followed by a colon. E.g. 'X:'. The drive letter must be
               available (i.e. nothing else mounted there).
<command>    - A command to run. ShadowSpawn will ensure that <src> is
               mounted at <drive:> before starting <command>, and will
               wait for <command> to finish before unmounting <drive:>


Exit Status:

If there is an error while processing (e.g. ShadowSpawn fails to
create the shadow copy), ShadowSpawn exits with status 1.

If there is an error in usage (i.e. the user specifies an unknown
option), ShadowSpawn exits with status 2.

If everything else executes as expected and <command> exits with
status zero, ShadowSpawn also exits with status 0.

If everything else executes as expected and <command> exits with a
nonzero status code n, ShadowSpawn exits with status n logically OR'ed
with 32768 (0x8000). For example, robocopy exits with status 1 when
one or more files are Scopied. So, when executing

  shadowspawn C:\foo X: robocopy X:\ C:\path\to\backup /mir

the exit code of ShadowSpawn would be 32769 (0x8000 | 0x1).

More Repositories

1

causatum

A Clojure library for generating streams of events based on stochastic state machines.
Clojure
232
star
2

hobocopy

An open source backup tool for Windows
C++
175
star
3

dynne

A Clojure library for working with audio.
Clojure
100
star
4

khordr

A keyboard chording application: supercharge your typing by pressing more than one key at once.
Clojure
34
star
5

reasoned-schemer

A project in which I work my way through a Clojure version of "The Reasoned Schemer"
Clojure
32
star
6

emacs

My emacs setup
Emacs Lisp
16
star
7

podcastifier

Process a pile of wav files into something like a final podcast episode.
Java
11
star
8

vmt

Virtual Mission Tools (VMT) for Falcon BMS. Examine the battlefield, generate weather, and more.
Clojure
8
star
9

show-keys.el

Display what keys are being typed in emacs in real-time.
Emacs Lisp
8
star
10

gherkin-mode

An emacs major mode for editing gherkin files.
Emacs Lisp
8
star
11

artifact

The Artifact board game
Clojure
8
star
12

aws-stats

A simple project for analyzing the log files that S3 produces. Written in Clojure.
Clojure
8
star
13

sudo

A very simple sudo for Windows
C#
7
star
14

weathergen

A program to randomly generate convincing weather for Falcon BMS.
JavaScript
6
star
15

falconpanel

Arduino program for turning physical switches, knobs, and buttons into a DirectX game controller.
C++
6
star
16

clojure-concurrency

A presentation on concurrency primitives in Clojure
4
star
17

doc-browse

Generates an HTML page describing a set of Clojure libraries
Clojure
4
star
18

cccp-emacs

An emacs client for the Common Collaborative Coding Protocol.
Emacs Lisp
4
star
19

HelloPhoneGapAndroid

A simple PhoneGap application making use of ClojureScript
JavaScript
3
star
20

lsobot

A carrier landing grading tool for Falcon BMS.
Clojure
3
star
21

kchordr

This project has moved. New home: https://github.com/candera/khordr
C#
3
star
22

stopwatch

A simple stopwatch application with count up and countdown functionality.
C#
3
star
23

reponomicon

A git server that stores its metadata in Datomic.
Clojure
2
star
24

cs-atom

Export a CommunityServer SQL Server database into Atom suitable for import into Blogger
Clojure
2
star
25

eliza-clj

A simple wrapper around a Java implementation of Eliza.
Java
2
star
26

geirrod

Web front end for GitHub issues providing better grouping and sorting
Clojure
2
star
27

clojure-data-structures

A presentation about the immutable, persistent collections in Clojure
CSS
2
star
28

HelloPhoneGapple

A simple PhoneGap application that shows how to integrate ClojureScript (iOS version)
JavaScript
2
star
29

explosion-man

A Clojure version of BomberMan.
Clojure
2
star
30

backup

My backup script
Shell
2
star
31

slideshow

Clojure slideshow app
Clojure
1
star
32

geirrod-rails

A Rails implementation of the geirrod issue tracking system.
Ruby
1
star
33

tpanl

iPhone/Smart Phone keypress relay.
C#
1
star
34

csv-bom-converter

Converts BOM output from Fusion 360 into a cutlist that CutList Optimizer can read
Clojure
1
star
35

3d-models

Miscellaneous 3D models
OpenSCAD
1
star
36

namespaces-symbols-vars

A presentation about namespaces, symbols, and vars in Clojure
JavaScript
1
star
37

trempature

Displays the current outdoor temperature in the tray.
C#
1
star
38

icfp-2017

Entry in the ICFP 2017 contest for Team "Drop Table Team"
Clojure
1
star
39

scripts

Various useful scripts
Shell
1
star
40

logos-play

Clojure
1
star
41

foobar-the-second

Test project
1
star
42

clojuredc-xml

Slides from my 2015-05-26 presentation at clojuredc.org
1
star
43

cccp-mode

An emacs plugin for the Common Colaborative Coding Protocol.
Emacs Lisp
1
star
44

hotelibot

A Slack bot
Clojure
1
star
45

swivelbot

A remote-controlled turntable
Clojure
1
star
46

strangeloop-2013-datomic

My 2013 Strange Loop presentation entitled "Real-World Datomic: An Experience Report"
CSS
1
star
47

kpanl

Clojure-powered application for building graphical panels on your mobile device to send keystokes to an application.
Clojure
1
star
48

timekeeper

A Clojure application that will beep to indicate a series of on-off cycles. I use it to time exercises - 30 seconds on, 20 seconds off, five repeats. That sort of thing.
Clojure
1
star